From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: poffice@blade.nagaokaut.ac.jp Delivered-To: poffice@blade.nagaokaut.ac.jp Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (Postfix) with ESMTP id 21DD217D4575 for ; Mon, 25 Nov 2013 12:23:06 +0900 (JST) Received: from funfun.nagaokaut.ac.jp (smtp.nagaokaut.ac.jp [133.44.2.201]) by kankan.nagaokaut.ac.jp (Postfix) with ESMTP id 9E5BCB5D863 for ; Mon, 25 Nov 2013 11:55:18 +0900 (JST) Received: from funfun.nagaokaut.ac.jp (localhost.nagaokaut.ac.jp [127.0.0.1]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id E934897A839 for ; Mon, 25 Nov 2013 11:55:19 +0900 (JST) X-Virus-Scanned: amavisd-new at nagaokaut.ac.jp Authentication-Results: funfun.nagaokaut.ac.jp (amavisd-new); dkim=fail (2048-bit key) reason="fail (message has been altered)" header.d=gmail.com Received: from funfun.nagaokaut.ac.jp ([127.0.0.1]) by funfun.nagaokaut.ac.jp (funfun.nagaokaut.ac.jp [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id P94i4AdLhyBw for ; Mon, 25 Nov 2013 11:55:19 +0900 (JST) Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id B192497A826 for ; Mon, 25 Nov 2013 11:55:19 +0900 (JST) Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by voscc.nagaokaut.ac.jp (Postfix) with ESMTP id 606D995241E for ; Mon, 25 Nov 2013 11:55:18 +0900 (JST) Received: from [221.186.184.76] (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 73FC41208C6; Mon, 25 Nov 2013 11:55:15 +0900 (JST) X-Original-To: ruby-core@ruby-lang.org Delivered-To: ruby-core@ruby-lang.org Received: from mail-ie0-f176.google.com (mail-ie0-f176.google.com [209.85.223.176]) by neon.ruby-lang.org (Postfix) with ESMTPS id 8FCAB120858 for ; Mon, 25 Nov 2013 11:55:07 +0900 (JST) Received: by mail-ie0-f176.google.com with SMTP id at1so6042208iec.35 for ; Sun, 24 Nov 2013 18:55:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=9w5+ptMOlnr8MdZot4kpL5yQcwrabaD/o2likv+j0SM=; b=R4R4i2Zam7udtqpfwT0sjvLMtpoU+E6CXI6SDCEE39uyrL8XdJevYKY2UmbkfNPAF+ la2d99D8fQHiy1aU0/c4i2KnhX/svkxHkMhPVxAkHLV7jJEMlYA7tBD7fniRnB2Nbc6p nKItbCxTR+YBA31zRCUXgQMbbuNRuYrrVwUs0p+QOEBTyfuP6osNurAphuFs1DecBp7s 2F6b0rjkOfcHD3A64F9XgSxisaNbMjLv1MHo49JaJKxlTPi9Q4lNRZLJLc8hgAjNTvWC +t/H+XDYF+4YJ1BRZQmuY04WfK2vlgdpvpHQqd57pEaAgNCGtXUgqju7ptMe0hetzE/F WXzQ== X-Received: by 10.50.62.211 with SMTP id a19mr11221098igs.18.1385348105279; Sun, 24 Nov 2013 18:55:05 -0800 (PST) Received: from [10.0.0.48] ([76.209.132.41]) by mx.google.com with ESMTPSA id x5sm24033487iga.6.2013.11.24.18.55.03 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 24 Nov 2013 18:55:04 -0800 (PST) Message-ID: <5292BC05.4000504@gmail.com> Date: Sun, 24 Nov 2013 18:55:01 -0800 From: Joel VanderWerf User-Agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 MIME-Version: 1.0 To: Ruby developers References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ML-Name: ruby-core X-Mail-Count: 58562 Subject: [ruby-core:58562] Re: [ruby-trunk - Feature #9145][Feedback] Queue#pop(true) return nil if empty instead of raising ThreadError X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" On 11/23/2013 08:30 PM, Glass_saga (Masaki Matsushita) wrote: > I think we can't change default behavior of Queue#pop(true) because some code expects ThreadError to be raised. > However, it may be possible to introduce new keyword argument like following: > > q = Queue.new > while next_item = q.pop(true, exception: false) # it doesn't raise ThreadError and returns nil. > # do something > end Or what about a new method, Queue#pop?, which is always non-blocking and non-raising. It would behave like: class Queue def pop? pop(true) rescue ThreadError nil end end q = Queue.new q << 1 q << 2 q << 3 while x=q.pop? p x end __END__ output: 1 2 3