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 は混乱し、+2 項演算子であると考えて、2 番目のオペランドを待っています。

于 2012-08-03T00:38:32.053 に答える
0

Ruby パーサーはその特定の組み合わせを処理できないようです。記号には制限が:+ありますが、などは、ブラケットを適切に解釈する必要があると思われるある種の特殊なケースです。

:+単独で評価しようとすると、解析されないことに注意してください。同じことが他のオペレーターにも当てはまり、「魔法:*:/ような」何かがここで起こっています。

于 2012-08-03T00:37:27.883 に答える