4

假设我有def f(a); a + 1; end并应用f到 List 它通常看起来像[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 语法?

4

3 回答 3

3
[1, 2, 3].map &method(:f)
=> [2, 3, 4]

Object#method

于 2013-02-23T01:27:42.173 回答
2

地图需要一个块。如果你愿意,你可以这样做:

f = lambda { |a| a+1 }
[1,2,3].map &f

这样,您将块作为参数传递。为了通过参数传递块,您需要使用 & 符号。

于 2013-02-22T23:58:27.263 回答
0

你也可以这样做:

print (1..3).collect{|i| i+1}  #=> [2, 3, 4]

或者这也是:

(1..3).map(&:succ)  #=> [2, 3, 4]
于 2013-02-23T00:27:05.590 回答