4

通常は のように見える Listを持っていて、それ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 構文になるにはどうすればよいですか?

4

3 に答える 3

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

を参照してくださいObject#method

于 2013-02-23T01:27:42.173 に答える
2

Map にはブロックが必要です。必要に応じて、次のようなことができます。

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 に答える