Ruby分配和比较在一行?

时间:2010-09-30 22:05:39

标签: ruby

这似乎无法按预期工作:

if c = Countries.first.nil?
  ... do something
end

比较有效,但作业没有。有没有办法在一行中进行比较和分配?

2 个答案:

答案 0 :(得分:9)

这就是你真正想要的:

if (c = Countries.first).nil?
  # ... do something
end

在您的示例中,您将获得c = (Countries.first.nil?),因此c将为falsetrue

你可能真的这样写:

unless (c = Countries.first)
  # ... do something
end

但要小心!我会保持()到位,因为否则它看起来就像你的比较,红宝石翻译会警告你。

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

答案 1 :(得分:2)

如果你想将c分配给Countries.first,如果c为nil:

c = Countries.first if c.nil?