代码之家  ›  专栏  ›  技术社区  ›  Erik Escobedo

兰姆达斯的缺点是什么?

  •  1
  • Erik Escobedo  · 技术社区  · 14 年前

    我经常喜欢这样做:

    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))
    

    2 回复  |  直到 14 年前
        1
  •  6
  •   wuputah    12 年前

    主要的后果是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)
    

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

        2
  •  3
  •   FannyPack FannyPack    14 年前

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