Почему действия grails должны быть объявлены как методы, а не замыкания, и какая разница? - PullRequest
22 голосов
/ 09 февраля 2012

В граалях 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 Ответ

24 голосов
/ 09 февраля 2012

Ответ здесь

Ссылка сверху

Использование методов вместо свойств Closure имеет ряд преимуществ:

  1. Эффективное использование памяти
  2. Разрешить использование контроллеров без сохранения состояния (одноэлементная область)
  3. Вы можете переопределить действия из подклассов и вызвать переопределенный метод суперкласса с помощью super.actionName ()
  4. Методы могут быть перехвачены стандартныммеханизмы проксирования, то, что сложно сделать с Closures, поскольку они являются полями.

Также есть похожий интересный вопрос здесь , в котором есть некоторые подробности

...