以简洁的方式评估和分配方法值

时间:2016-03-14 15:20:51

标签: ruby

在Ruby中是否有办法分配一个值,该值也用于简洁地评估,即在评估和分配之前不存储方法的结果(在下面的情况下)?

def expensive_operation
...
end

ary = []
ary << expensive_operation unless expensive_operation.nil?

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那么你正在寻找一种更好的方式来编写类似的东西:

ary = []
result = expensive_operation
ary << result unless result.nil?

您可以使用:

ary = [expensive_operation].compact

或:

ary = []
ary += [expensive_operation].compact

compact方法将从数组中删除所有nil值。

或者,如果您想检查其他内容,可以使用reject

ary = [expensive_operation].reject { |e| e == '' }

这将删除块返回true的所有元素。

如果这实际上更具可读性取决于环绕声代码......

如果“没有存储方法的结果”你的意思是“没有实际运行昂贵的操作”,那么不,这实际上是不可能的...这就像说“我能知道2 + 2的结果是什么没有实际计算2 + 2“?