||
と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
構文エラーを発生させるのですか?