Ruby三元运算符(或)或运算符

时间:2015-03-20 09:54:21

标签: ruby-on-rails ruby ruby-on-rails-4

在Ruby中,我们经常使用三元运算符来检查条件。类似地,我们使用或运算符(||)来使用两者中的任何一个。

我有两种方式可以使用的场景: 三元运算符

@question = question.present? ? question : Question.new

或操作员

@question = question || Question.new

这些条件之间有什么区别,因为两者都给出了相同的输出?另外哪一个更适合在控制器方法中使用,因为我没有经验来自己决定。

3 个答案:

答案 0 :(得分:7)

这里的区别在于,例如,[].present?''.present?都返回false。所以:

question = ''
@question = question.present? ? question : Question.new
# => result of Question.new
@question = question || Question.new
# => ''

但如果question只能保留nilQuestion个实例(总是存在,假设存在它是一个普通的ActiveRecord模型。所以这更多的是个人品味。

答案 1 :(得分:1)

三元运算符检查条件,如果为真则返回第一个值,否则返回第二个值。使用它,您可以指定条件,以决定返回什么值。

OR运算符按以下方式工作 - 如果第一个表达式不是nilfalse,则返回它,否则返回第二个表达式。在这里,您无法指定条件,因为检查是直接在您要返回的第一个值上进行的。 OR运算符可以表示为:

if question
  @question = question
else
  @question = Question.new
end

决定使用哪一个完全取决于您想要应用的条件。在您的情况下,您要确保question不是nil。因此,OR运算符在这种情况下很好,并且比三元运算符短。 希望能给出一些澄清。

答案 2 :(得分:0)

对于这种情况,您可以使用其中任何一个,两者都相同。

我希望使用@question = question || Question.new更容易阅读。

然而,在许多情况下,||和三元运算符都有不同的输出。所以你不能认为这是理所当然的。