Ruby分配和比较在一行?

Ree*_*Law 3 ruby

似乎这没有按预期工作:

if c = Countries.first.nil?
  ... do something
end
Run Code Online (Sandbox Code Playgroud)

比较有效,但任务没有.有没有办法在一行中进行比较和分配?

Pet*_*ter 9

这是你真正想要的:

if (c = Countries.first).nil?
  # ... do something
end
Run Code Online (Sandbox Code Playgroud)

在你的例子中,你会得到c = (Countries.first.nil?),所以c将是falsetrue.

你可能真的这样写:

unless (c = Countries.first)
  # ... do something
end
Run Code Online (Sandbox Code Playgroud)

但要小心!我会保持这一点(),因为否则它会显示你的意思是比较,红宝石翻译会警告你.

我有时会使用这种模式,但要谨慎使用它,因为它会使事情变得不那么清晰.