4

为什么我不能Enumerable#reduce(sym)在没有括号的情况下调用,如下所示?

>> [1, 2, 3].reduce :+
?>

使用括号会导致:

>> [1, 2, 3].reduce(:+)
=> 6

我是Enumerable#reduce {| memo, obj | block }不是不小心打电话了?

此外,为什么会发生这种情况?

>> [1, 2, 3].reduce &:+
?> ^C
>> [1, 2, 3].reduce(&:+)
=> 6

非常感谢!

4

2 回答 2

7

这似乎是 IRb 解析器中的错误。如果您在 Pry、命令行或文件中尝试它,它工作得很好:

ruby -e"res = [1, 2, 3].reduce :+
p res"
# 6

基本上, IRb 会感到困惑,认为+是二元运算符并正在等待第二个操作数。

于 2012-08-03T00:38:32.053 回答
0

Ruby 解析器似乎无法处理该特定组合。符号有限制,但:+等是某种特殊情况,显然需要正确解释括号。

请注意,如果您尝试自行评估:+,它不会解析。其他运营商:*也是:/如此,所以这里发生了一些“神奇”的事情。

于 2012-08-03T00:37:27.883 回答