我能找到的关于 Ruby 的新安全导航运算符 ( ) 的每个问题的答案(Q1、Q2&. )都错误地声明它obj&.foo等同于obj && obj.foo.
很容易证明这种等价是不正确的:
obj = false
obj && obj.foo # => false
obj&.foo # => NoMethodError: undefined method `foo' for false:FalseClass
此外,存在多重评估的问题。用具有副作用的表达式替换obj表明副作用仅在&&表达式中加倍:
def inc() @x += 1 end
@x = 0
inc && inc.itself # => 2
@x = 0
inc&.itself # => 1
obj&.foo避免这些问题的最简洁的 pre-2.3 等价物是什么?