我有这个条件:
foo(:bar) if foo(:bar) != 0
我问自己是否有更好的" rails- / ruby-way"表达这种情况? (没有两次调用foo(:bar)?)
答案 0 :(得分:2)
你的例子是一种非常正常的做法。正如@ndn所说,如果你的方法foo不是高性能或非常冗长,你可以分配给一个变量,结果不方便调用两次。
compilation symbol
答案 1 :(得分:1)
[foo(:bar)].find{ |x| x.nonzero? }
当然,在一般情况下,您可以使用您希望的任何其他谓词而不是x.nonzero?
在问题中给出的情况下,您可以写得更简单
[foo(:baz)].find(&:nonzero?)
答案 2 :(得分:0)
因此,只有当该函数的结果不为0时,您才希望调用函数。这意味着您无论如何都必须调用该函数来检查它的结果,所以只需:
foo(:bar)
这是没有背景的,如果你提供一些使用它的背景,我相信我们可以提供更好的选择。