Project

General

Profile

Actions

Feature #7612

closed

Enumerators take a proc

Added by pedz (Perry Smith) over 9 years ago. Updated over 9 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:51099]

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.

Actions

Also available in: Atom PDF