Issue #7612 has been reported by pedz (Perry Smith). ---------------------------------------- Feature #7612: Enumerators take a proc https://bugs.ruby-lang.org/issues/7612 Author: pedz (Perry Smith) Status: Open Priority: Normal Assignee: Category: Target version: If there is already a clean syntax for this, I apologize. I sure could not find it. class Foo def initialize @inst = 18 end def meth(a, b) puts "method #{@inst} #{a} #{b}" end end foo = Foo.new e = %w{a b c}.each_with_index p1 = Proc.new { |a, b| puts "proc #{a} #{b}" } m2 = foo.method(:meth) p2 = m2.to_proc # Current Syntax possibilities e.each { |a, b| puts "direct #{a} #{b}" } e.each { |a, b| foo.meth(a, b) } e.each { |a, b| p1.call(a,b) } e.each { |a, b| m2.call(a,b) } e.each { |a, b| p2.call(a,b) } # Proposed Addition e.each(p1) # same as e.each { |a, b| p1.call(a,b) } e.each(m2) # same as e.each { |a, b| m2.call(a,b) } e.each(p2) # same as e.each { |a, b| p2.call(a,b) } # In the case of a method or lambda, the arguments are checked and possible errors thrown. # In the case of a proc, the proc "tricks" apply To add readability, an "apply_to" method could be added: e.apply_to(p1) The extra "each" bothers me since the enumerator already has an "each" associated with it.
on 2012-12-23 19:50
on 2012-12-23 20:15
Issue #7612 has been updated by trans (Thomas Sawyer). =begin Use `&`: e.each(&p1) e.each(&m2) e.each(&p2) =end ---------------------------------------- Feature #7612: Enumerators take a proc https://bugs.ruby-lang.org/issues/7612#change-35034 Author: pedz (Perry Smith) Status: Open Priority: Normal Assignee: Category: Target version: If there is already a clean syntax for this, I apologize. I sure could not find it. class Foo def initialize @inst = 18 end def meth(a, b) puts "method #{@inst} #{a} #{b}" end end foo = Foo.new e = %w{a b c}.each_with_index p1 = Proc.new { |a, b| puts "proc #{a} #{b}" } m2 = foo.method(:meth) p2 = m2.to_proc # Current Syntax possibilities e.each { |a, b| puts "direct #{a} #{b}" } e.each { |a, b| foo.meth(a, b) } e.each { |a, b| p1.call(a,b) } e.each { |a, b| m2.call(a,b) } e.each { |a, b| p2.call(a,b) } # Proposed Addition e.each(p1) # same as e.each { |a, b| p1.call(a,b) } e.each(m2) # same as e.each { |a, b| m2.call(a,b) } e.each(p2) # same as e.each { |a, b| p2.call(a,b) } # In the case of a method or lambda, the arguments are checked and possible errors thrown. # In the case of a proc, the proc "tricks" apply To add readability, an "apply_to" method could be added: e.apply_to(p1) The extra "each" bothers me since the enumerator already has an "each" associated with it.
on 2012-12-23 20:28
Issue #7612 has been updated by marcandre (Marc-Andre Lafortune). Status changed from Open to Rejected ---------------------------------------- Feature #7612: Enumerators take a proc https://bugs.ruby-lang.org/issues/7612#change-35035 Author: pedz (Perry Smith) Status: Rejected Priority: Normal Assignee: Category: Target version: If there is already a clean syntax for this, I apologize. I sure could not find it. class Foo def initialize @inst = 18 end def meth(a, b) puts "method #{@inst} #{a} #{b}" end end foo = Foo.new e = %w{a b c}.each_with_index p1 = Proc.new { |a, b| puts "proc #{a} #{b}" } m2 = foo.method(:meth) p2 = m2.to_proc # Current Syntax possibilities e.each { |a, b| puts "direct #{a} #{b}" } e.each { |a, b| foo.meth(a, b) } e.each { |a, b| p1.call(a,b) } e.each { |a, b| m2.call(a,b) } e.each { |a, b| p2.call(a,b) } # Proposed Addition e.each(p1) # same as e.each { |a, b| p1.call(a,b) } e.each(m2) # same as e.each { |a, b| m2.call(a,b) } e.each(p2) # same as e.each { |a, b| p2.call(a,b) } # In the case of a method or lambda, the arguments are checked and possible errors thrown. # In the case of a proc, the proc "tricks" apply To add readability, an "apply_to" method could be added: e.apply_to(p1) The extra "each" bothers me since the enumerator already has an "each" associated with it.
on 2012-12-23 20:40
Great! I tried something similar but I must have botched it somehow. Oh.... I bet I tried e(&p1)
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.