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



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 的结果是什么吗"?

最新更新