为啥要将 grails 操作声明为方法而不是闭包,它有啥区别?

Posted

技术标签:

【中文标题】为啥要将 grails 操作声明为方法而不是闭包,它有啥区别?【英文标题】:Why should grails actions be declared as methods instead of closures and what difference does it make?为什么要将 grails 操作声明为方法而不是闭包,它有什么区别? 【发布时间】:2012-03-01 14:09:34 【问题描述】:

在 grails 2.0 中有什么新的 http://grails.org/doc/2.0.0.RC1/guide/introduction.html#whatsNew 它说:1.1.3 Web Features Controller Actions as Methods It is now possible to define controller actions as methods instead of using closures as in previous versions of Grails. In fact this is now the preferred way of expressing an action. 例如:

// action as a method
def index() 

// action as a closure
def index = 


为什么这很重要?有什么区别?

更新:我发现这个讨论讨论了很多关于范围和一些非常多毛的东西。 http://grails.1312388.n4.nabble.com/Controller-actions-methods-or-closures-was-Re-grails-dev-Statically-typed-meta-programing-td3048287.html

我想我的问题也可能是这样的:闭包对操作有什么好处?

【问题讨论】:

【参考方案1】:

答案是here

从上面的链接

利用方法而不是闭包属性有一些优点:

    内存高效 允许使用无状态控制器(单例范围) 您可以覆盖子类中的操作并使用 super.actionName() 调用被覆盖的超类方法 可以使用标准代理机制拦截方法,这对于闭包来说很复杂,因为它们是字段。

还有一个类似的 groovy question here 有更多细节

【讨论】:

很有趣,那么为什么它们会关闭呢?

以上是关于为啥要将 grails 操作声明为方法而不是闭包,它有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

为啥要将 Java 接口方法声明为抽象的?

为啥使用闭包进行赋值而不是直接为键赋值?

为啥 Grails 使用 H2 而不是 Oracle?

为啥 Grails 要求我在控制器中使用 `def` 而不是 `void`?

为啥 C# 8.0 中使用声明的变量的闭包不同?

Grails 更新而不是删除