Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby lambdas的缺点是什么?_Ruby_Lambda - Fatal编程技术网

Ruby lambdas的缺点是什么?

Ruby lambdas的缺点是什么?,ruby,lambda,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会

我经常喜欢这样做:

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会带来什么负面后果吗?

主要的后果是Ruby程序员并不特别习惯这样做。社区成员、团队其他成员、未来的维护人员等更容易阅读您的任一备选方案

第二个结果是以这种方式创建一次性lambda函数将比调用静态函数慢。无论如何,创建lambda并不特别慢,但它仍然比不使用它们慢。如果你经常这样做,它就会开始累积。要给出一些上下文。因此,如果您反复这样做(例如,在一个反复使用的函数调用中),这种差异可能会累积起来

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

a, b = [:f1, :f2].collect { |fn| send(fn, some_function(some_data)) }
总之,我认为你的第一个选择是最干净的方法:

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

你在做什么是完全清楚的,而且效率也很高。

主要的结果是Ruby程序员并不特别习惯这样做。社区成员、团队其他成员、未来的维护人员等更容易阅读您的任一备选方案

第二个结果是以这种方式创建一次性lambda函数将比调用静态函数慢。无论如何,创建lambda并不特别慢,但它仍然比不使用它们慢。如果你经常这样做,它就会开始累积。要给出一些上下文。因此,如果您反复这样做(例如,在一个反复使用的函数调用中),这种差异可能会累积起来

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

a, b = [:f1, :f2].collect { |fn| send(fn, some_function(some_data)) }
总之,我认为你的第一个选择是最干净的方法:

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

你所做的一切都很清楚,而且效率也很高。

我还不能评论,所以我只是想模仿乌普塔,他是对的。我看过的每一个Ruby优化视频和我读过的每一本书都说,除非你绝对需要lambdas,否则不要使用lambdas,因为当你尝试扩展你的应用程序时,它们会带来巨大的性能冲击。这并不是说你不应该使用它们,只是不要滥用它们。

我还不能评论,所以我只是想模仿武普塔,他是对的。我看过的每一个Ruby优化视频和我读过的每一本书都说,除非你绝对需要lambdas,否则不要使用lambdas,因为当你尝试扩展你的应用程序时,它们会带来巨大的性能冲击。这并不是说你不应该使用它们,只是不要滥用它们。

唉,我删除了我的
对象#tap
想法,因为tap总是返回被点击的内容,而不是块的结果。我完全同意这一点。我会把原来的问题转过来,问一下创建lambdas的间接方法什么时候有意义。我不是回答这个问题的最佳人选,但我最常用的lambdas是在外部循环中动态创建它们,以便调用内部循环。主要的激励因素是性能,但它实际上也有助于代码的清晰性,将决策放在逻辑上发生的地方(例如,我将对这50000件事情应用什么样的比较函数),而不是放在迭代的内部。唉,我删除了我的
对象#tap
想法,因为tap总是返回被点击的内容,我完全同意这一点。我会把原来的问题转过来,问一下创建lambdas的间接方法什么时候有意义。我不是回答这个问题的最佳人选,但我最常用的lambdas是在外部循环中动态创建它们,以便调用内部循环。主要的激励因素是性能,但它实际上也有助于代码的清晰性,将决策放在逻辑上发生的地方(例如,我将对这50000件事情应用什么样的比较函数),而不是放在迭代的内部。你从哪里学来这种编码风格的?这对我来说很奇怪:)我有时想知道lambda是否是一种代码味道。你从哪里学来这种编码风格的?这对我来说很奇怪:)我有时想知道lambda是否是一种代码气味。你能提供一个链接吗?谢谢,我可以试试。这是我在优化中加入书签的两个视频。还有一个我找不到的例子,基准测试Rubinius和他讨论了一些加速代码的方法,他介绍了Lambda:下面是另一个视频,指出Lambda的性能非常好:。但这不是免费的,我也不确定这9美元值不值得。我确实学到了一些东西,但不值得花9美元;更像是价值1.5美元。一个更合理的价格-价值比是每段视频5美元。你能提供一个链接吗?谢谢,我可以试试。这是我在优化中加入书签的两个视频。还有一个我找不到的例子,基准测试Rubinius和他讨论了一些加速代码的方法,他介绍了Lambda:下面是另一个视频,指出Lambda的性能非常好:。但这不是免费的,我也不确定这9美元值不值得。我确实学到了一些东西,但不值得花9美元;更像是价值1.5美元。更合理的价格价值比是每部视频5美元。