Ruby の新しい安全なナビゲーション演算子 () に関して、私が見つけることができるすべての質問 ( Q1、Q2 ) への回答は、それが と同等であると&.
誤って宣言しています。obj&.foo
obj && obj.foo
この等価性が正しくないことを示すのは簡単です:
obj = false
obj && obj.foo # => false
obj&.foo # => NoMethodError: undefined method `foo' for false:FalseClass
また、多重評価の問題もある。副作用のある式に置き換えるobj
と、式でのみ副作用が 2 倍になることがわかり&&
ます。
def inc() @x += 1 end
@x = 0
inc && inc.itself # => 2
@x = 0
inc&.itself # => 1
obj&.foo
これらの問題を回避する最も簡潔な2.3より前の同等物は何ですか?