如果在 Ruby 中突然出现 η-约简,会发生什么?

4
假设我有def f(a); a + 1; end,并且将f应用于List时通常看起来像[1,2,3].map { |x| f x }
当我想使用η-还原((λ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个回答

3

2

Map函数需要一个块。如果你想的话,可以像这样做:

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

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


0

你也可以这样做:

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

或者也可以这样写:
(1..3).map(&:succ)  #=> [2, 3, 4]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接