我想在我的一個應用程序的模型中寫一些驗證邏輯。我想建立的邏輯看起來像這樣。Ruby邏輯和/或鏈
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
是否有可能在ruby方法中做到這一點?
我想在我的一個應用程序的模型中寫一些驗證邏輯。我想建立的邏輯看起來像這樣。Ruby邏輯和/或鏈
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
是否有可能在ruby方法中做到這一點?
當然可以。然而,有兩件事要注意:
this == true
而不是this = true
。and
和or
代替&&
和||
時要非常小心 - 他們不等同。請閱讀operator precedence in ruby,它與其他語言(如PHP)略有不同。對於大多數邏輯語句,您可能最好堅持使用&&
和||
,並保留使用or
和and
來控制流,例如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
像「this?」這樣的方法有什麼意義?它已經是一個布爾值了,「如果這個」和「如果這個?」做同樣的事情。我是一個重構狂熱分子,但這看起來非常極端。 –
好吧,我沒有閱讀任何有關'這'只是一個布爾值。所以我雖然可以有另一個值爲零。 –
然後相同的評論:該方法給你的簡單表達式不是什麼? –
當然;這是正常的條件邏輯。雖然你在那裏有一項任務,但不是檢查平等。另外,請確定你知道'&&'和'和'之間的差異等。 –
非常好!所以使用括號是分組邏輯的有效方法? – capcode01
是的!它甚至建議... – PinnyM