【发布时间】:2013-04-03 16:02:02
【问题描述】:
如何简化这个表达式?
m.immutable = params[:immutable] || false
RubyMine 建议:“可以简化表达式。此检查会警告布尔函数中的冗余部分”,但没有说明要做什么。
这个想法是如果“不可变”参数没有被传递,则分配 false。
【问题讨论】:
如何简化这个表达式?
m.immutable = params[:immutable] || false
RubyMine 建议:“可以简化表达式。此检查会警告布尔函数中的冗余部分”,但没有说明要做什么。
这个想法是如果“不可变”参数没有被传递,则分配 false。
【问题讨论】:
只需单击 Alt+Enter 即可显示 RubyMine
m.immutable = params[:immutable]
在某些情况下,这可以帮助你,但如果你没有传递参数,那么 immutable 将为 nil, 这可能不是你所期望的
【讨论】:
nil 在布尔上下文中计算为 false,但与 == 相比它们并不相同。
nil 和false 而来到这里:值得问问自己为什么你想明确地有一个@ 987654327@ 当您可以使用 params[:immutable] 中的任何错误值时
这是实现这一目标的更好方法:
m.immutable = !! params[:immutable]
使用!! 是一个Ruby 技巧,可确保将表达式转换为布尔值。
例如即使params[:immutable] 的计算结果为nil,!! 也会将其转换为false——否则它将是true
【讨论】:
!!。因为nil 无论如何都是假的,所以没有必要。
!! 是 Ruby 实现它的方式。这样就可以区分未设置、真、假
m.immutable 应该始终是一个布尔值,我最喜欢你的答案,因为它立即清楚地表明了这一点——从 OP 的代码中我假设它应该是false 或某个值。