【发布时间】:2010-09-30 22:05:39
【问题描述】:
这似乎没有按预期工作:
if c = Countries.first.nil?
... do something
end
比较有效,但分配无效。有没有办法在一行中同时进行比较和赋值?
【问题讨论】:
标签: ruby
这似乎没有按预期工作:
if c = Countries.first.nil?
... do something
end
比较有效,但分配无效。有没有办法在一行中同时进行比较和赋值?
【问题讨论】:
标签: ruby
这才是你真正想要的:
if (c = Countries.first).nil?
# ... do something
end
在您的示例中,您将获得c = (Countries.first.nil?),因此c 将是false 或true。
你实际上可能会这样写:
unless (c = Countries.first)
# ... do something
end
但要小心!我会将() 保留在原位,否则它看起来就像您的意思是比较,并且 ruby 解释器会警告您。
我有时会使用这种模式,但要谨慎使用它,因为它会使事情变得不那么清晰。
【讨论】:
.nil?)......但我可能误读了他的问题的意图。
c 设置为Countries.first.nil?,但他实际上想将c 设置为Countries.first,然后检查if c.nil?
如果你想将 c 分配给 Country.first 如果 c 为 nil:
c = Countries.first if c.nil?
【讨论】:
c ||= Countries.first。