3

case等価演算子は次の===ように機能します。

2 === 2  #=> true
2 .=== 2 #=> true

優先順位と結合性がどのように機能するかを確認するために、次のように試しました。

2 === 2 === 3
# SyntaxError: (irb):3: syntax error, unexpected tEQQ
# 2 === 2 === 3
#           ^
#        from C:/Ruby193/bin/irb:12:in `<main>'

なぜエラーが返されたのですか? 以下はエラーになりません。上記のエラーをどのように解決しますか?

2 .=== 2 === 3  #=> false
4

1 に答える 1

6

Ruby はどの式を最初に評価するかを認識していないため、エラーがスローされます。Integer#===でメソッドを明示的に呼び出すと.===、Ruby はこれを他のメソッド呼び出しとして扱います。つまり、右側のすべてがそのメソッドの引数であると想定します。これらのオプションの括弧により、実際には最後の例で書いています:

2.===( 2 === 3 )

この式はあいまいではないため、エラーなしで評価できます。

これはあなたが期待するものを返さないことに注意してください。例えば:

2.===( 2 === 2 )
#=> false

内部の戻り値2 === 2は ですtrue。これは と比較され2、明らかに2.===(true)が返されますfalse

于 2013-03-03T17:00:11.100 に答える