簡體   English   中英

Ruby 的安全導航運算符 (&.) 在生產代碼中使用多年后不再按預期工作

[英]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 }

itemnil ,所以嘗試執行這一行會給我以下錯誤

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM