【发布时间】:2019-03-21 01:38:37
【问题描述】:
x ? x : y 有简写吗?一个相对温和的例子:
def find_or_create_by_name(name)
self.find_by_name(name) ? self.find_by_name(name) : self.create(name)
end
我当然可以做类似的事情
def find_or_create_by_name(name)
x = self.find_by_name(name)
x ? x : self.create(name)
end
但是我开始失去我最初用三元运算符节省的空间。 (如果我使用完整的 if 语句,也会出现同样的冗余。
【问题讨论】:
-
x ? x : y的简写是x || y,几乎适用于所有非深奥语言。 -
看起来像 Rails。
-
看看 Rails 的
find_or_create_by(提示:它是find_by(...) || create(...)) -
请注意,
find_by_name(name) ? find_by_name(name) : create(name)通常与x = find_by_name(name); x ? x : create(name)不同。例如,假设@tot = 0; def find_by_name(name); @tot += 1; name; end。在第一种情况下,@tot #=> 2,在第二种情况下,@tot #=> 1。请注意,self.不是必需的,即使该方法使用了它。
标签: ruby ternary-operator