наследование при заводном закрытии - PullRequest
4 голосов
/ 17 сентября 2011

Как наследование работает в Groovy для замыканий?Есть ли что-то особенное, о чем стоит знать?Мое приложение заключается в расширении контроллера плагинов, который мне нужно оставить в покое, если появятся какие-либо обновления для него.

1 Ответ

7 голосов
/ 17 сентября 2011

Наследование по замыканию не имеет особого смысла (в любом случае, как мы их используем). Закрытие на практике является экземпляром класса Closure. Если бы мы создали подклассы Closure, мы могли бы создать их подклассы, но это не так. Например, в контроллерах мы определяем действия как встроенные экземпляры, например

def list = {
...
}

Они обрабатываются как методы, в которых мы можем вызвать list(), но это просто синтаксический сахар для list.call(), поскольку call() - это метод экземпляра класса Closure.

В Grails 2.0 предпочтительным подходом к созданию действий контроллера является использование методов, хотя для обратной совместимости все еще поддерживаются замыкания. Одной из основных причин этого переключения является поддержка перегрузки и переопределения, что невозможно (или, по крайней мере, практически) при встроенных замыканиях. Вы можете определить экземпляр замыкания в подклассе с тем же именем, что и экземпляр базового класса, но вы не можете вызвать super.list(), так как это приведет к StackOverflowError

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...