26

Ruby 2.3 で Safe ナビゲーション operator( &.) (別名、孤独な演算子) が導入されたため、nilオブジェクトに対する動作が奇妙に思えます。

nil.nil?    # => true
nil&.nil?   # => nil

このように動作するように設計されていますか?または、孤独なオペレーターを追加するときにすり抜けたエッジケースはありますか?

4

2 に答える 2

8

これは、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これが通常の論理で意味をなす可能性は低いです。

于 2016-01-04T00:49:10.093 に答える