0

我正在尝试在我的一个应用程序的模型中编写一些验证逻辑。我想构建的逻辑看起来像这样。

def validation
    if this == true or (!that.nil? and those < 1000)
       do something
    else
       do nothing
end

是否可以在 ruby​​ 方法中执行此操作?

4

2 回答 2

3

你当然可以。但是,有两点需要注意:

  • 我怀疑你的意思是this == true而不是this = true.
  • and使用andor而不是&&and时要非常小心||- 它们并不等效。阅读ruby​​ 中的运算符优先级,它与 PHP 等其他语言略有不同。对于大多数逻辑语句,您最好坚持使用&&and||并保留使用orandand来控制流,例如redirect and return.

所以你的具体例子应该是这样的:

 if this == true || (!that.nil? && those < 1000)
   do something
 else
   do nothing
 end

在这种特殊情况下,括号是多余的,因为&&前面是||,但它们不会受到伤害,对于更复杂的事情,使用它们来避免由于对运算符优先级的误解而产生的歧义和微妙的错误是一种很好的做法。

于 2012-12-05T16:01:29.503 回答
1

当然,我只建议您创建较小的方法,例如比较每个属性并在该方法上调用它们的方法。

def validation
  if this? or others?
    #do something
  else
    #do nothing
  end
end

private

def others?
  that? and those?
end

def this?
  this == true
end

def that?
  that != nil
end

def those?
  those < 1000
end
于 2012-12-05T16:04:48.660 回答