Ruby赋值和比较在一行中?

Ruby赋值和比较在一行中?,ruby,Ruby,这似乎并不像预期的那样有效: if c = Countries.first.nil? ... do something end 比较有效,但作业无效。有没有一种方法可以同时在一行中进行比较和赋值?这是您真正想要的: if (c = Countries.first).nil? # ... do something end 在您的示例中,您将得到c=(Countries.first.nil?,因此c将是false或true 你可以这样写: unless (c = Countries.fi

这似乎并不像预期的那样有效:

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

比较有效,但作业无效。有没有一种方法可以同时在一行中进行比较和赋值?

这是您真正想要的:

if (c = Countries.first).nil?
  # ... do something
end
在您的示例中,您将得到
c=(Countries.first.nil?
,因此
c
将是
false
true

你可以这样写:

unless (c = Countries.first)
  # ... do something
end
但是要小心!我会将
()
保留在适当的位置,因为否则它会看起来像是在进行比较,ruby解释器会警告您


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

如果要将c分配给国家/地区。首先,如果c为零:

c = Countries.first if c.nil?

为什么不像里德那样?我假设他想分配c=true或false(从
.nil?
)。。。但我可能误解了他的问题的意图。@Andrew Reed的方式将
c
设置为
国家。首先,0?
,但是他想把
c
设置为
国家。首先
然后检查
如果c.nil?
这是一个很好的例子,说明了为什么使用括号很重要。或者是一个更好的例子,说明了如何将一个语句一分为二不会造成伤害。实际上,如果这是你想要的,你可以使用
c | |=国家。首先