2015-05-01 106 views
0

Ruby中有更好/更清晰的方法嗎?Ruby:如果方法返回非零值,則返回

def my_method(x, y) 
    return error if (error = validate(x, y)) 
    # do something else 
end 

我在別處打電話給#validate,所以爲了保持乾爽,我讓它返回錯誤信息。

+0

'validate(x,y)'返回一個'Boolean'嗎? – Drenmi

+0

正常情況下,像例外情況一樣,錯誤會中止過程。他們是爲什麼要避免這種情況的特殊原因?例如,當你運行my_method時,你是否隨後檢查在繼續之前是否返回錯誤對象?否則,而不是返回錯誤,你可以引發錯誤 – jphager2

回答

2

什麼不對這個更明確,更具可讀性的版本?

def my_method(x, y) 
    error = validate(x, y) 

    if error 
    error 
    else 
    # do something else 
    end 
end 

IMO在編寫最短代碼時沒有任何好處。您應該始終致力於編寫最易讀易懂的代碼。

0

另一種方式來寫同樣的事情將是:

def my_method(x, y) 
    unless validate(x, y) 
     # do something else 
    end 
    end 

這將返回答案來驗證它是否返回任何東西。

1

如果在輸入錯誤和nil否則validate將返回錯誤,那麼你可以做:

def my_method(x, y) 
    validate(x, y) or # do something else 
end