安全导航运算符
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
警告:
安全导航操作符与链接条件的行为不完全相同。使用链式条件(第一个例子),如果 address 是 false,则不会执行 if 块。安全导航操作符仅识别 nil 值,但允许使用 false 等值。如果 address 是 false,使用 SNO 将产生错误:
house&.address&.street_name
# => undefined method `address' for false:FalseClass