在Ruby中,我们经常使用三元运算符来检查条件。类似地,我们使用或运算符(||)来使用两者中的任何一个。
我有两种方式可以使用的场景: 三元运算符
@question = question.present? ? question : Question.new
或操作员
@question = question || Question.new
这些条件之间有什么区别,因为两者都给出了相同的输出?另外哪一个更适合在控制器方法中使用,因为我没有经验来自己决定。
答案 0 :(得分:7)
这里的区别在于,例如,[].present?
或''.present?
都返回false
。所以:
question = ''
@question = question.present? ? question : Question.new
# => result of Question.new
@question = question || Question.new
# => ''
但如果question
只能保留nil
或Question
个实例(总是存在,假设存在它是一个普通的ActiveRecord
模型。所以这更多的是个人品味。
答案 1 :(得分:1)
三元运算符检查条件,如果为真则返回第一个值,否则返回第二个值。使用它,您可以指定条件,以决定返回什么值。
OR运算符按以下方式工作 - 如果第一个表达式不是nil
或false
,则返回它,否则返回第二个表达式。在这里,您无法指定条件,因为检查是直接在您要返回的第一个值上进行的。 OR运算符可以表示为:
if question
@question = question
else
@question = Question.new
end
决定使用哪一个完全取决于您想要应用的条件。在您的情况下,您要确保question
不是nil
。因此,OR运算符在这种情况下很好,并且比三元运算符短。
希望能给出一些澄清。
答案 2 :(得分:0)
对于这种情况,您可以使用其中任何一个,两者都相同。
我希望使用@question = question || Question.new
更容易阅读。
然而,在许多情况下,||
和三元运算符都有不同的输出。所以你不能认为这是理所当然的。