gpt4 book ai didi

常规 : Closures or Methods

转载 作者:行者123 更新时间:2023-12-03 07:40:24 29 4
gpt4 key购买 nike

我已经养成了尽可能使用闭包来代替常规方法的习惯,即使我不需要访问自由变量。所以,我将使用这个:

def addNumbers = { 左、右 -> 左 + 右 }

..而不是这个:

def addNumbers (左,右) { 左 + 右 }

这是不好的做法吗?我更喜欢使用闭包而不是方法时获得的额外功能,而且我更喜欢语法。

谢谢!

最佳答案

我只在需要的地方使用闭包,即我默认使用方法。我这样做是因为

  • 方法比闭包更简单。闭包有一个委托(delegate),一个所有者,保留对创建时位于其本地范围内的变量(即所谓的“自由变量”)的访问权限。默认情况下,闭包内的方法调用通过以下方式解析:

    1. 关闭本身
    2. 关闭所有者
    3. 关闭委托(delegate)

但是这个顺序可以在运行时更改,并且闭包的委托(delegate)也可以更改为任何对象。

所有这些因素结合起来可能会使一些使用闭包的代码变得非常棘手,因此如果您不需要任何这种复杂性,我更愿意通过使用方法来消除它

  • 为 Groovy 中定义的每个闭包生成一个 .class 文件。我完全没有零证据支持常规方法比闭包性能更高的说法,但我有怀疑。至少,很多类可能会导致你用完 PermGen 内存空间 - 这在我身上经常发生,直到我将 PermGen 空间提高到大约 200MB

我不知道我所提倡的做法(默认使用方法,仅在需要时使用闭包)是否被广泛认为是“最佳实践”,所以我很想听听其他人的想法。

关于常规 : Closures or Methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1825424/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com