Rubyの「||= OR EQUALS演算子」に関する疑問 [重複]
概要
Ruby の OR EQUALS (||=) 演算子についていくつか疑問があります。 Ruby インタプリタはどのように実装するのでしょうか?コードのサンプルは次のとおりです。
class C
def arr
@num ||= []
end
end
この状況で OR EQUALS 演算子を使用すると、このメソッドへの最初の呼び出しで変数が初期化され、要素が追加されますが、これは問題ありません。 arr への 2 回目の呼び出しが行われたとき、配列内に要素が 1 つあることをどのようにして知るのでしょうか。
解決策
Ruby では、論理 false とみなされる値が 2 つあります。 1 つ目はブール値 false で、もう 1 つは nil です。非 nil であり、明示的に false でないものはすべて true です。このメソッドを初めて実行したとき、@num は nil であり、これは false として扱われ、||= の論理和の部分を評価する必要があり、最終的に空の配列を @num に割り当てます。これは非 nil なので、true に相当します。本当だから || x が何であっても、x は true です。今後の呼び出しでは、Ruby は評価を省略し、代入を行いません。