From: "drbrain (Eric Hodel)" <drbrain@...7.net>
Date: 2013-11-25T15:17:42+09:00
Subject: [ruby-core:58564] [ruby-trunk - Feature #9145] Queue#pop(true)	return nil if empty instead of raising ThreadError


Issue #9145 has been updated by drbrain (Eric Hodel).


Note that the current behavior allows you to distinguish between a nil in the queue (returns nil) and no value in the queue (raises ThreadError)
----------------------------------------
Feature #9145: Queue#pop(true) return nil if empty instead of raising ThreadError
https://bugs.ruby-lang.org/issues/9145#change-43140

Author: jsc (Justin Collins)
Status: Feedback
Priority: Normal
Assignee: 
Category: ext
Target version: 


I propose the non-blocking form of Queue#pop behave like Array#pop and return nil when empty.

Current behavior is to raise a ThreadError, with a message indicating the queue is empty.

For example:

q = Queue.new
begin
  loop do
    next_item = q.pop(true)
  end
rescue ThreadError
  # queue is empty...or maybe something bad happened
end

Instead, this could be

q = Queue.new
while next_item = q.pop(true)
end

Alternatively, raise an exception that is a subclass of ThreadError with a more specific name, such as "QueueEmpty". This would be a small improvement while remaining compatible with existing code.


-- 
http://bugs.ruby-lang.org/