我有这样的声明:
if user = params[:user] && action == :delete
end
为什么用户始终设置为:delete?
如果用户通过,则不应将设置为用户名,否则设置为nil。
答案 0 :(得分:3)
您需要将()
放在Ruby中的赋值周围,以便按预期进行评估
if (user = params[:user]) && action == :delete
end
答案 1 :(得分:1)
&&
比分配更强大。如果您希望省略括号,则可以使用and
:
if user = params[:user] and action == :delete
end
作为style的问题 - 使用=(赋值)的返回值是可以的,但用括号括起赋值。
# good - shows intended use of assignment
if (v = array.grep(/foo/)) ...
# bad
if v = array.grep(/foo/) ...
# also good - shows intended use of assignment and has correct precedence.
if (v = self.next_value) == 'hello' ...
不鼓励在条件表达式中使用and
和or
,因此您最好使用Ian Bishop建议的解决方案。