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

Mad*_*han 3 ruby ruby-on-rails ruby-on-rails-4

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

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

@question = question.present? ? question : Question.new
Run Code Online (Sandbox Code Playgroud)

或运营商

@question = question || Question.new
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*pka 7

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

question = ''
@question = question.present? ? question : Question.new
# => result of Question.new
@question = question || Question.new
# => ''
Run Code Online (Sandbox Code Playgroud)

但是,如果question只能持有nil或Question实例(它始终存在,假设它是常规ActiveRecord模型),那么它不应该意味着你的情况.所以这更多的是个人品味.