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.thingsnilfalse
false通常のブール論理ではとを区別するのが難しいため、nilこれが通常の論理で意味をなす可能性は低いです。