2015-05-01 108 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