我正在尝试定义一个块,我将使用它来传递多个范围的 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/

10-13 04:41