Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
このメソッドが無限再帰で死ぬのではなく 1 を返すのはなぜですか?
def foo foo ||= 1 end foo # => 1
次のように書き直しました。
def foo foo.nil? ? 1 : foo end
最初のケースでfoo ||= 1は、ローカル変数を参照します。ベアワードに代入を行うと、Ruby は常にローカル変数を作成しself.foo = ...ますdef foo=(value)。||=結局のところ、演算子はただの凝った代入演算子です。
foo ||= 1
self.foo = ...
def foo=(value)
||=
2番目の場合は代入がないので、 にヒットすると、Rubyは裸の単語をメソッド呼び出しとfoo.nil?解釈して爆発します。foo
foo.nil?
foo