安全导航运算符

Ruby 2.3.0 添加了安全导航操作符 &.。此运算符旨在缩短条件语句中 object && object.property && object.property.method 的范例。

例如,你有一个带有 address 属性的 House 对象,你想从 address 找到 street_name。要安全地编程以避免旧版 Ruby 中的 nil 错误,你可以使用如下代码:

if house && house.address && house.address.street_name
  house.address.street_name
end

安全导航运算符缩短了这种情况。相反,你可以写:

if house&.address&.street_name
  house.address.street_name
end

警告:
安全导航操作符与链接条件的行为不完全相同。使用链式条件(第一个例子),如果 addressfalse,则不会执行 if 块。安全导航操作符仅识别 nil 值,但允许使用 false 等值。如果 addressfalse,使用 SNO 将产生错误:

house&.address&.street_name
# => undefined method `address' for false:FalseClass