||とor、 または&&との違いはand理解できますが、理解できないのは次のとおりです。
の値を返すメソッド、またはfalse の@var場合は nil の場合は初期化するメソッドを考えてみましょう。@var
私は JavaScript のバックグラウンドから来たので、次のように記述し||ます=。
def some_method
@var || (@var = MyClass.new)
end
優先順位が低いためor、またはを使用します。or
def some_method
@var or @var = MyClass.new
end
またはより簡潔に:
def some_method
@var ||= MyClass.new
end
しかし、たまたまこのバージョンも機能しました:
def some_method
@var || @var = MyClass.new
end
Web を検索しましたが、有用な結果が見つかりませんでした。
それらのほとんどは、 と の違いを伝えるだけ||ですor。
||演算子の優先順位表には、 の優先順位が よりも高いことが明確に示されてい=ます。
私もできるしa = b || c = d、Ruby はそれをa = (b || (c = d)).
この動作はどこかに文書化されていますか、それとも Ruby の魔法のようなものですか?
PS CoffeeScript も同じ動作をします。
更新/明確化: この質問は短絡評価に関するものではありません。しかし、演算子の優先順位について。もう一度言い換えさせてください:
||の優先順位が よりも高い場合=、なぜ ruby はa || a = bを認識しa || (a = b)、(a || a) = b構文エラーを発生させるのですか?