Ruby中的赋值不能按预期工作

时间:2012-10-09 05:25:15

标签: ruby

我有这样的声明:

if user = params[:user] && action == :delete
end

为什么用户始终设置为:delete?

如果用户通过,则不应将

设置为用户名,否则设置为nil。

2 个答案:

答案 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' ...

不鼓励在条件表达式中使用andor,因此您最好使用Ian Bishop建议的解决方案。