Ruby 中有没有办法分配一个值,该值也用于以简洁的方式进行评估,也就是说,在评估和分配之前不存储方法的结果(在下面的示例中)?
def expensive_operation
...
end
ary = []
ary << expensive_operation unless expensive_operation.nil?
如果我正确理解了你的问题,你正在寻找一种更好的方法来写这样的东西:
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 的结果是什么吗"?