由于 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,这在普通逻辑中不太可能有意义。