ruby-on-rails - 不要在安全导航运算符之后链接普通方法调用

标签 ruby-on-rails ruby rubocop

我找不到这个 rubocop 警告的问题 不要在安全导航运算符之后链接普通方法调用。

price_array = user&.user_price_fluctuation&.market_price&.sort << user_price&.sort

最佳答案

想想安全导航运算符的作用:它的计算结果为 nil如果调用该方法的对象是 nil .

所以,如果 foo不是 nil , 然后 foo&.bar会调用barfoo , 但如果 foonil , 然后 foo&.barnil ,也是。

这就是为什么在安全导航运算符之后链接普通方法调用没有意义的原因:

foo&.bar.baz

如果foo不是 nil , 这会起作用,但如果 foonil , 然后 foo&.bar也是nil你正试图调用 nil.baz ,这是行不通的。换句话说:该代码仅在您已经知道 foo 时才有效。不是 nil ,但是你一开始就不需要安全导航运算符!

您的代码也是如此:if any if user或链中的任何中间值是 nil , 那么您正在调用 nil << something ,这是行不通的。您需要确保整个链使用安全导航运算符:

price_array = user&.user_price_fluctuation&.market_price&.sort&.<<(user_price&.sort)

当然,更好的解决方案是忘记安全导航运算符,而是弄清楚那些nil在哪里。值(value)观首先来自并修复它。

关于ruby-on-rails - 不要在安全导航运算符之后链接普通方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71567003/

相关文章:

ruby-on-rails - 强参数不起作用

html - 如何测试 Cucumber 中的 mailto 链接?

ruby-on-rails - 将现有应用程序的 Sqlite3 切换到 PostgreSQL

ruby-on-rails - 在 Rails 中计算到下一个生日的天数

ruby-on-rails - 设计 - 在开发中跳过用户确认

ruby - 在代码块上使用保护子句

ruby-on-rails - 如何将订阅者关联到事件

ruby - Net::SFTP 排序目录文件?

ruby - Rubocop 25 行 block 大小和 RSpec 测试

ruby - 从 Yardoc 文档中删除 rubocop 注释