Почему действия Grails должны быть объявлены как методы вместо закрытия и какая разница?
В grails 2.0 whats new 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
Ответ здесь
Сверху ссылку
Методы использования вместо свойств Closure имеют некоторые преимущества:
- Эффективная память
- Разрешить использование контроллеров без состояния (Singleton scope)
- Вы можете переопределить действия из подклассов и вызвать переопределенный метод суперкласса с помощью super.actionName()
- Методы могут быть перехвачены стандартными механизмами проксирования, что сложно сделать с Closures, поскольку они являются полями.
Также есть аналогичный groovy вопрос здесь, который содержит несколько подробностей