Ruby 2.3 で Safe ナビゲーション operator( &.
) (別名、孤独な演算子) が導入されたため、nil
オブジェクトに対する動作が奇妙に思えます。
nil.nil? # => true
nil&.nil? # => nil
このように動作するように設計されていますか?または、孤独なオペレーターを追加するときにすり抜けたエッジケースはありますか?
Ruby 2.3 で Safe ナビゲーション operator( &.
) (別名、孤独な演算子) が導入されたため、nil
オブジェクトに対する動作が奇妙に思えます。
nil.nil? # => true
nil&.nil? # => nil
このように動作するように設計されていますか?または、孤独なオペレーターを追加するときにすり抜けたエッジケースはありますか?
これは、nil&.nil?
が の省略形であるためnil && nil.nil?
です。これは に評価されnil && true
、それは になりnil
ます。
(nil && x).nil?
true
の任意の値に対して、常に に評価されますx
。
構文には力がありますが、この特定のケースは、開発者にとって「落とし穴」になる可能性があります。
(stuff&.things).nil?
=> これはtrue
、何かが存在しない場合に生成するか、 をstuff.things
返しますnil
。
対以下のケース:
stuff&.things&.nil?
=> これは、 where が 以外のものを返す場合を除いて、すべての場合に生成されnil
ます。 stuff.things
nil
false
false
通常のブール論理ではとを区別するのが難しいため、nil
これが通常の論理で意味をなす可能性は低いです。