安全導航運算子

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