2012-09-15 21 views

回答

0

您可以memoize的结果在retval

def retval 
    return @retval if @retval 
    # some resource intensive computation 

    @retval = whatever 
end 

def foo 
    ... 
    return retval if retval 
    ... 
end 

对于较短的方法,一个很好的成语是:

def retval 
    @somevar ||= some_work 
end 
+0

不错,memoization是一个伟大的建议,我没有想到,但在我的情况'retval'将在不同的情况下返回不同的结果,所以我不能只是做这种结果缓存。即,下一次控制通过'foo'时,我需要重新评估。 – Purplejacket

3

下面是同样的事情

def foo 
    if x = retval 
    return x 
    end 
    ... 
end 

我怕,如果你正在寻找只在语法,你不会得到截然不同的结果的另一变化。此外,这有什么问题?

def foo 
    ... 
    x = retval 
    return x if x 
    ... 
end 

这就是我该怎么写的。

+0

“这有什么问题?” ......我认为这并不坏......我只是被像'|| ='这样的语法糖弄坏了,所以我想知道是否有很好的东西来掩饰这种情况。 – Purplejacket

+0

是的,这似乎是双线是最好的答案。 – Purplejacket

0

如果你正在寻找一个班轮

return x if (x = retval) 

如果x已被定义才有效。

if x = retval; x; end 

确实工作,但没有人真正写的Ruby的方式。

根据您的情况,可能会

return true if retval 

是可能的,还是你实际需要,从retval返回的值返回?

UPDATE:由于OP说是的价值需要返回,塞尔吉奥的答案是恕我直言正确的。当然,还有另外一种方式可以在内部表达中使用相当难看的内容:

x = retval and return x 

Yikes! :-)

+1

你肯定是说'if x = retval; X;结束',不是吗? :) –

+0

+1肯定!谢谢。 –

+0

是的,我其实需要retval返回。 – Purplejacket

相关问题