我找不到这个 rubocop 警告的问题
不要在安全导航运算符之后链接普通方法调用。
price_array = user&.user_price_fluctuation&.market_price&.sort << user_price&.sort
最佳答案
想想安全导航运算符的作用:它的计算结果为 nil
如果调用该方法的对象是 nil
.
所以,如果 foo
不是 nil
, 然后 foo&.bar
会调用bar
在 foo
, 但如果 foo
是nil
, 然后 foo&.bar
是nil
,也是。
这就是为什么在安全导航运算符之后链接普通方法调用没有意义的原因:
foo&.bar.baz
如果foo
不是 nil
, 这会起作用,但如果 foo
是nil
, 然后 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/