安全導航運算子
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