From: uwe@... Date: 2018-01-01T19:41:23+00:00 Subject: [ruby-core:84576] [Ruby trunk Feature#9145] Queue#pop(true) return nil if empty instead of raising ThreadError Issue #9145 has been updated by uwe@kubosch.no (Uwe Kubosch). How about a block form where the block is called with the popped element? The method would return false if called with non_block set to true if the queue is empty. q = Queue.new q << 1 q << 2 q << 3 while q.pop(true){|x| p x} ---------------------------------------- Feature #9145: Queue#pop(true) return nil if empty instead of raising ThreadError https://bugs.ruby-lang.org/issues/9145#change-69116 * Author: jsc (Justin Collins) * Status: Open * Priority: Normal * Assignee: * 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. -- https://bugs.ruby-lang.org/ Unsubscribe: