更好的方式来写条件

时间:2010-08-10 19:47:59

标签: ruby-on-rails ruby

有没有更好的方法来写这个条件?

if (self.expense.nil? && self.income.nil?) || (!self.expense.nil? && !self.income.nil?)
  puts "test"
end

3 个答案:

答案 0 :(得分:18)

您正在测试表达式是否为true或两者都为false。试试这个:

if (self.expense.nil? == self.income.nil?)

你不关心它们是真的还是假的,只是它们是相同的。

答案 1 :(得分:1)

尽管有逻辑,因为你使用if来检查nil,你可以像这样缩短代码:

if ((expense && income) || (!expense && !income))
  puts "test"
end

如果我错了,请纠正我。

答案 2 :(得分:0)

您可以在if条件的后半部分使用Demorgan定律

因此(!self.expense.nil? && !self.income.nil?)变为!(self.expense.nil? || self.income.nil?)