Ruby 1.9中的Lambda函数

4

我没有理解这个变更的意思。源自:

longest_path_first = lambda do |host, location, _, _|

致:

longest_path_first = lambda do |(host, location, _, _)|

有人能解释一下吗?

1个回答

8
>> al = lambda { |a,b,c| b }
>> bl = lambda { |(a,b,c)| b }
>> list = [[1,1,1], [2,2,2], [3,3,3], [4,0,4]]
>> list.sort_by &al
ArgumentError: wrong number of arguments (1 for 3)
    from (irb):1:in `block in irb_binding'
    from (irb):4:in `each'
    from (irb):4:in `sort_by'
>> list.sort_by &bl
 => [[4, 0, 4], [1, 1, 1], [2, 2, 2], [3, 3, 3]] 

这有助于解释他们为什么这样做。

Ruby语言改变的原因是为了使lambda函数与普通方法保持一致:

>> def test(a,b,c); b; end
>> test [1,2,3]
ArgumentError: wrong number of arguments (1 for 3)
    from (irb):16:in `test'

一个避免使用不太美观语法的好方法是使用新的、闪亮的 Stab 操作符tm

cl = ->(a, b, c) { b }

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