安全导航运算符
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