我正在尝试定义一个块,我将使用它来传递多个范围的 each 方法。我不想在每个范围上重新定义块,而是想创建一个 Lamba,并像这样传递 lambda:
count = 0
procedure = lambda {|v| map[count+=1]=v}
("A".."K").each procedure
("M".."N").each procedure
("P".."Z").each procedure
但是,我收到以下错误:
ArgumentError:参数数量错误(1 代表 0)
来自 code.rb:23:in `each'
任何想法这里发生了什么?
最佳答案
在参数上加上一个和号 ( &
),例如:
("A".."K").each &procedure
这表示您将它作为方法的特殊块参数传递。否则它被解释为一个正常的参数。
它还反射(reflect)了您捕获和访问方法本身内部块参数的方式:
# the & here signifies that the special block parameter should be captured
# into the variable `procedure`
def some_func(foo, bar, &procedure)
procedure.call(foo, bar)
end
some_func(2, 3) {|a, b| a * b }
=> 6
关于ruby - 将 lambda 作为块传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8162257/