プロが教える店舗&オフィスのセキュリティ対策術

v1 = 1 - 1 == 0
v2 = v1 || raise RuntimeError
puts v2 && false

1行目を処理した後のv1はtrueになります。

2行目では、||の優先順位が高いため、v1 || raiseが評価されます。
しかし、後ろにRuntimeErrorがあるため、シンタックスエラーになっています。
この挙動を回避するには、以下の3つの方法があります。

ex1)

v2 = v1 or raise RuntimeError

ex2)

v2 = v1 || raise(RuntimeError)

ex3)

v2 = v1 || (raise RuntimeError)

問題集にこう書いてあるのですが、
v2 = v1 || raise RuntimeError

v2 = v1 || raise(RuntimeError)
この違いがよく分かりません。
exmampleというメソッドに引数があった場合に
example(1)

example 1
といったパターンがあり、どちらにしろこの1文をまとめて評価されていると思うのですが、私は
example 1 では()が省略されているものだと思っていました。
この問題を見る限りそれは間違いなのでしょうか?

A 回答 (1件)

引数の括弧省略時の「メソッドと引数の結合度合い」は、ほとんどの演算子の結合度合いより低いので、他の演算子が絡むときは、かっこを付けたほうがいいです。


公式リファレンスを見たのですが、そのあたりを書いている部分が見つかりませんでした。

v2 = v1 || raise RuntimeError
は、
v2 = (v1 || raise)(RuntimeError)
と同じ意味で、オア演算の結果の値をメソッドだとみなして、それをRuntimeErrorを引数に呼び出そうとします。
    • good
    • 1
この回答へのお礼

大変分かりやすい回答をありがとうございました!とても理解しやすかったです

お礼日時:2019/10/13 17:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!