From: "ko1 (Koichi Sasada)" Date: 2013-08-07T09:53:43+09:00 Subject: [ruby-core:56421] [ruby-trunk - Feature #8639] Add Queue#each Issue #8639 has been updated by ko1 (Koichi Sasada). # Please assume # @q_buf is current buffer (array) of queue in following example. # @q_lock is lock of this Queue. People think Queue#each should be: (1) Infinite loop # iterate forever def each loop{ yield @q_buf.shift } end (2) Finite loop (2-1) Mutable behavior # iterate untile elements are exists def each loop{ e = nil @q_lock.lock{ return if @q_buf.empty? @q_buf.shift } yield e } end (2-2) Immutable behaviour def each(&b) @q_buf.dup.each(&b) end # only for chekcking current elements # not for inter-thraed communication # Please add another possible version. Your proposal is (1). (1) is shorter version of while e = q.pop break if e == :end ... end which I wrote frequently. q.each{|e| break if e == :end ... } I'm weak negative because (a) seems not so convinient (b) #each method is for Enumerable If we find #each method, then we think it is Enumerable. (c) we have only few cases for infinite iteration #each methods. (d) I can think 3 versions described above with in seconds. BTW, I think your `non-blocking' parameter should be a switch of (1) and (2-1). ---------------------------------------- Feature #8639: Add Queue#each https://bugs.ruby-lang.org/issues/8639#change-40951 Author: avdi (Avdi Grimm) Status: Open Priority: Normal Assignee: Category: Target version: I was fiddling around with Queue the other day and realized it doesn't have an #each method. So I made one: https://github.com/ruby/ruby/pull/361 As for why, it makes for a convenient way to build consumer processes: inq = Queue.new outq = Queue.new doubler = Thread.new do inq.each do |n| outq << n + n end end My PR also returns an Enumerator when no block is given, and handles the non_block argument. I'm sure there's some good reason that this method wasn't there already, so feel free to explain. Also, this is my first Ruby feature ticket so please let me know if I'm missing any points of protocol. Thanks! -- http://bugs.ruby-lang.org/ _______________________________________________ ruby-core mailing list ruby-core@ruby-lang.org http://lists.ruby-lang.org/cgi-bin/mailman/listinfo/ruby-core