lambda的缺点是什么?

Eri*_*edo 1 ruby lambda

我经常喜欢这样做:

a, b = lambda do |data|
    [f1(data), f2(data)]
end.call(some_function(some_data))
Run Code Online (Sandbox Code Playgroud)

而不是这个:

data = some_function(some_data))
a, b = f1(data), f2(data)
Run Code Online (Sandbox Code Playgroud)

或这个:

a, b = f1(some_function(some_data)), f2(some_function(some_data))
Run Code Online (Sandbox Code Playgroud)

几乎每一件事都使用lambdas会有什么负面后果吗?

wup*_*tah 6

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

次要结果是以这种方式创建一次性lambda函数将比调用静态函数慢.无论如何,创建lambda并不是特别慢,但它仍然比不使用它们慢.如果你做了很多,它会开始加起来.为了给出一些上下文,创建一个空的lambda比一个空数组要长10倍.因此,如果你反复这样做(例如在一遍又一遍地使用的函数调用中),那么差异可能会增加.

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

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

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

data = some_function(some_data)
a, b = f1(data), f2(data)
Run Code Online (Sandbox Code Playgroud)

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