我只是潜入Procs,blocks和lambdas。我正在考虑尝试不同的事情,但我不确定为什么这不起作用:
def iterate(ary, &code)
ary.each_with_index do |n, i|
ary[i] = code.call(n)
end
end
iterator = Proc.new do |n|
n ** 2
end
p iterate([1,2,3], iterator)
# `iterate': wrong number of arguments (2 for 1) (ArgumentError)
答案 0 :(得分:3)
那是因为&最后一个方法参数之前的符号用于将块显式定义为参数。
在您的情况下,您有两种方式: 1)使用proc参数而不是block:
def iterate(ary, code)
ary.each_with_index do |n, i|
ary[i] = code.call(n)
end
end
iterator = Proc.new do |n|
n ** 2
end
p iterate([1,2,3], iterator) # => [1, 4, 9]
或2)使用块而不是proc创建:
def iterate(ary, &code)
ary.each_with_index do |n, i|
ary[i] = code.call(n)
end
end
p iterate([1,2,3]) { |n| n ** 2 } # => [1, 4, 9]
答案 1 :(得分:1)
我认为,当你传入一个proc(而不是一个块)时,你不需要方法定义中&
参数前面的code
。