应该怎么做才能使η减少突然出现在红宝石中?

时间:2013-02-22 23:47:05

标签: ruby

假设我有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语法?

3 个答案:

答案 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]