[英]Ruby's safe navigation operator (&.) not working as intended anymore after being in use on production code for years
我在已經運行多年沒有問題的生產代碼中遇到了這個問題,突然間我在很多地方使用了&.
運營商只是崩潰。 所以我想知道它是否不僅僅是一個環境變量或某種解釋器選項。 它在 Rails 5.1.4
上運行 Ruby 2.5.9
以下面一行為例
s.item.tags.select { |tag| tag.name }
item
是nil
,所以嘗試執行這一行會給我以下錯誤
undefined method `tags' for nil:NilClass
所以理論上通過使用&.
操作員
s.item&.tags.select { |tag| tag.name }
我不應該得到這個錯誤,但我是
private method `select' called for nil:NilClass
在我看來它應該停在s.item&.
並返回nil
,但它會繼續進行。
如果我添加另一個&.
它只會在下一個崩潰
s.item&.tags&.select { |tag| tag.name }.map { ... }
undefined method `map' for nil:NilClass
等等。
我應該提一下,我假設正在發生的事情是,過去從未出現過s.item
為零的情況,因此它從未因此而崩潰。 似乎大多數錯誤都與該特定項目相關聯,該項目為零,可能不是因為環境變量或解釋器選項。
一定是你這邊的數據問題——一些新s
記錄不包含任何這些關系items
-> tags
,而不是 Ruby 的安全導航行為在同一版本中自行改變(假設沒有 ruby 版本升級發生)。
Ruby 中的安全導航就是這樣。 即使在 Ruby 的官方文檔中,也有提到的行為:
注意 &。 只跳過一個下一個調用,所以對於更長的鏈,有必要在每一層添加運算符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.