数组 – 运算符数组#<<以简写形式的reduce失败
发布时间:2020-12-17 01:35:20 所属栏目:百科 来源:网络整理
导读:基于 Symbol#to_proc 实现,有一种众所周知的速记形式将块传递给任何方法. 代替: [1,2,3].reduce(0) { |memo,e| memo + e }# or[1,3].reduce { |memo,e| memo.+(e) } 有人可能写道: [1,3].reduce :+ 以上是后者“标准符号”的确切“同义词”. 现在让我们有
基于
Symbol#to_proc 实现,有一种众所周知的速记形式将块传递给任何方法.
代替: [1,2,3].reduce(0) { |memo,e| memo + e } # or [1,3].reduce { |memo,e| memo.+(e) } 有人可能写道: [1,3].reduce &:+ 以上是后者“标准符号”的确切“同义词”. 现在让我们有两个数组: a = [[1,"a"],[2,"b"]] b = [[3,"c"],[4,"d"]] 两者都有 b.reduce(a) { |memo,e| memo << e } # and b.reduce(a) { |memo,e| memo.<<(e) } 将正确更新数组inplace,就像a.concat(b)一样: #? [[1,"b"],[3,"d"]] 如果突然引发异常,则为短符号: b.reduce(a) &:<< #??TypeError: [[1,"b"]] is not a symbol 我错过了什么? Ruby 2.1. 附:铸造于this question. 解决方法b.reduce(a) &:<< 将无法正常工作,因为它不是有效的方法调用.相反,将符号作为最后一个参数传递: b.reduce(a,&:<<) # => [[1,"d"]] 你打电话的时候: [1,3].reduce &:+ &:是该方法的参数.它实际上相当于: [1,3].reduce(&:+) 如果方法的最后一个参数前面是&,那么它被认为是Proc对象(符号到Proc技巧).然后将其从参数列表中删除,并转换为块,然后该方法关联该块. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |