Feature #7612
closedEnumerators take a proc
Description
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.
Updated by trans (Thomas Sawyer) over 11 years ago
=begin
Use &
:
e.each(&p1)
e.each(&m2)
e.each(&p2)
=end
Updated by marcandre (Marc-Andre Lafortune) over 11 years ago
- Status changed from Open to Rejected
Updated by Anonymous over 11 years ago
Great! I tried something similar but I must have botched it somehow.
Oh.... I bet I tried e(&p1)
On Dec 23, 2012, at 1:15 PM, trans (Thomas Sawyer) wrote:
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-35034Author: 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
enddef meth(a, b)
puts "method #{@inst} #{a} #{b}"
end
endfoo = 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_procCurrent 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.