lambda的缺点是什么?

时间:2010-10-19 10:09:24

标签: ruby lambda

我经常喜欢这样做:

a, b = lambda do |data|
    [f1(data), f2(data)]
end.call(some_function(some_data))

而不是:

data = some_function(some_data))
a, b = f1(data), f2(data)

或者这个:

a, b = f1(some_function(some_data)), f2(some_function(some_data))

几乎每件事都使用lambdas会产生任何负面影响吗?

2 个答案:

答案 0 :(得分:6)

主要结果是Ruby程序员并不是特别习惯这样做。社区成员,团队的其他成员,未来的维护者等都可以更容易地阅读其中一个替代方案。

次要结果是以这种方式创建一次性lambda函数将比调用静态函数慢。无论如何,创建lambda并不是特别慢,但它仍然比不使用它们慢。如果你做了很多,它会开始加起来。提供一些背景信息,creating an empty lambda takes about 10 times longer to create than an empty array。因此,如果你反复这样做(例如在一遍又一遍地使用的函数调用中),那么这种差异就会加起来。

最后,还有至少一种方法可以做到这一点。我也相信其他一些人也存在......

a, b = [:f1, :f2].collect { |fn| send(fn, some_function(some_data)) }

总而言之,我认为你的第一个选择是最干净的方法:

data = some_function(some_data)
a, b = f1(data), f2(data)

完全清楚你在做什么,也很有效率。

答案 1 :(得分:3)

我还不能发表评论所以我只是要反映Wuputah,他是对的。我看过的每一个Ruby优化视频和我读过的每本书都说过要避免使用lambdas,除非你绝对需要它们,因为当你尝试扩展你的应用程序时,它们可能是巨大的性能命中。这并不是说你不应该使用它们,只是不要滥用它们。