由于 Ruby 2.3 引入了安全导航操作符(&.
),也就是孤独操作符,nil
对象上的行为看起来很奇怪。
nil.nil? # => true
nil&.nil? # => nil
这是设计成这样吗?还是在添加孤独运算符时滑落的一些边缘情况?
由于 Ruby 2.3 引入了安全导航操作符(&.
),也就是孤独操作符,nil
对象上的行为看起来很奇怪。
nil.nil? # => true
nil&.nil? # => nil
这是设计成这样吗?还是在添加孤独运算符时滑落的一些边缘情况?
foo&.bar
是 的简写foo && foo.bar
,那么您希望表达式的结果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?
=> 这nil
在所有情况下都会产生,除了stuff.things
返回以外的东西的情况nil
,在这种情况下它会返回false
。
由于区分false
和的普通布尔逻辑中的困难nil
,这在普通逻辑中不太可能有意义。