在Ruby中是否有办法分配一个值,该值也用于简洁地评估,即在评估和分配之前不存储方法的结果(在下面的情况下)?
def expensive_operation
...
end
ary = []
ary << expensive_operation unless expensive_operation.nil?
答案 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“?