我正在尝试在我的一个应用程序的模型中编写一些验证逻辑。我想构建的逻辑看起来像这样。
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
是否可以在 ruby 方法中执行此操作?
我正在尝试在我的一个应用程序的模型中编写一些验证逻辑。我想构建的逻辑看起来像这样。
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
是否可以在 ruby 方法中执行此操作?
你当然可以。但是,有两点需要注意:
this == true
而不是this = true
.and
使用andor
而不是&&
and时要非常小心||
- 它们并不等效。阅读ruby 中的运算符优先级,它与 PHP 等其他语言略有不同。对于大多数逻辑语句,您最好坚持使用&&
and||
并保留使用or
andand
来控制流,例如redirect and return
.所以你的具体例子应该是这样的:
if this == true || (!that.nil? && those < 1000)
do something
else
do nothing
end
在这种特殊情况下,括号是多余的,因为&&
前面是||
,但它们不会受到伤害,对于更复杂的事情,使用它们来避免由于对运算符优先级的误解而产生的歧义和微妙的错误是一种很好的做法。
当然,我只建议您创建较小的方法,例如比较每个属性并在该方法上调用它们的方法。
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