为什么grails动作应该被声明为方法而不是闭包,它有什么区别?

时间:2012-02-09 03:56:25

标签: grails groovy closures

在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 个答案:

答案 0 :(得分:24)

答案是here

从上面链接

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

  1. 内存效率
  2. 允许使用无状态控制器(单例范围)
  3. 您可以覆盖子类中的操作,并使用super.actionName()调用重写的超类方法
  4. 方法可以使用标准代理机制拦截,这与Closures很复杂,因为它们是字段。
  5. 还有一个类似的常见问题here,其中包含更多细节