加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby中的Lambda 1.9

发布时间:2020-12-17 02:52:09 所属栏目:百科 来源:网络整理
导读:我不跟随 this change.来自: longest_path_first = lambda do |host,location,_,_| 至: longest_path_first = lambda do |(host,_)| 谁能解释一下? 解决方法 al = lambda { |a,b,c| b } bl = lambda { |(a,c)| b } list = [[1,1,1],[2,2,2],[3,3,3],[4,4]
我不跟随 this change.来自:

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

至:

longest_path_first = lambda do |(host,_)|

谁能解释一下?

解决方法

>> al = lambda { |a,b,c| b }
>> bl = lambda { |(a,c)| b }
>> list = [[1,1,1],[2,2,2],[3,3,3],[4,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,4],[1,3]]

有点说明他们为什么这样做了.

Ruby发生变化的原因是他们试图让lambda与普通方法保持一致:

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

绕过不完全漂亮的语法的好方法是使用新的闪亮的Stab运算符tm:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读