【发布时间】:2015-11-21 09:03:34
【问题描述】:
基于Symbol#to_proc 实现,有一种众所周知的速记形式可以将块传递给任何方法。
代替:
[1,2,3].reduce(0) { |memo, e| memo + e }
# or
[1,2,3].reduce { |memo, e| memo.+(e) }
可能会写:
[1,2,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) }
将正确地更新 a 数组,就像 a.concat(b) 会做的那样:
#⇒ [[1,"a"], [2,"b"], [3,"c"], [4,"d"]]
如果突然引发异常的短符号:
b.reduce(a) &:<<
#⇒ TypeError: [[1, "a"], [2, "b"]] is not a symbol
我错过了什么?红宝石 2.1。
P.S.由this question铸造。
【问题讨论】: