假设我有def f(a); a + 1; end
并将f
应用于列表,它通常看起来像[1,2,3].map { |x| f x }
。
当我想使用η-reduction((λx.Mx) → M
)时,我在这里遇到错误:
> [1,2,3].map f
ArgumentError: wrong number of arguments (0 for 1)
from (irb):2:in `f'
from (irb):4
from /usr/bin/irb:12:in `<main>'
应该怎样才能使它成为有效的Ruby语法?
答案 0 :(得分:3)
[1, 2, 3].map &method(:f)
=> [2, 3, 4]
请参阅Object#method
。
答案 1 :(得分:2)
地图需要一个块。如果你愿意,你可以这样做:
f = lambda { |a| a+1 }
[1,2,3].map &f
这样您就可以将块作为参数传递。为了通过参数传递块,您需要使用&amp;标志。
答案 2 :(得分:0)
你也可以这样做:
print (1..3).collect{|i| i+1} #=> [2, 3, 4]
或者也是这样:
(1..3).map(&:succ) #=> [2, 3, 4]