Groovy - закрытие против методов - различие

enter image description here

Если вы посмотрите очень внимательно на картинку, вы заметите, что вы можете реорганизовать Groovy код с помощью Eclipse IDE и преобразовать метод в закрытие и наоборот. Итак, что же такое закрытие снова и как оно отличается от метода? Может ли кто-нибудь дать хороший пример использования закрытия, а также почему это полезная функция? Анонимные внутренние классы были недостаточно хороши?

Ответ 1

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

Методы - это обычные методы Java. Ничего особенного.

И да, у анонимных внутренних классов есть много стандартного кода для выполнения простых действий.

Для сравнения:

button.addActionListener(
  new ActionListener() {
     public void actionPerformed( ActionEvent e ) {
          frame.dispose();
     }
  }
);

против

button.addActionListener { frame.dispose() }

С SO Groovy есть связанный вопрос : замыкания или методы и следующие ссылки на руководство пользователя, содержащее много полезной информации.

  1. http://groovy-lang.org/closures.html

Закрытие в Groovy - это открытый анонимный блок кода, который может принимать аргументы, возвращать значение и присваиваться переменной. Закрытие может ссылаться на переменные, объявленные в окружающей области видимости. В противоположность формальному определению замыкания, замыкание в языке Groovy также может содержать свободные переменные, которые определены вне его окружения. Разрывая формальную концепцию замыкания, он предлагает множество преимуществ, которые описаны в этой главе.

Ответ 2

Кроме того, поскольку Closures являются объектами первого класса, они могут передаваться, возвращаться и обрабатываться. Рассмотрим:

def add = { n, m -> n + m }
def add2 = add.curry( 2 )

assert add2( 4 ) == 6

def makeAdder = { n ->
    // return a Closure
    { m -> n + m }
}
def anotherAdd2 = makeAdder( 2 )

assert anotherAdd2( 4 ) == 6

Ответ 3

Закрытие в Groovy - это открытый анонимный блок кода, который может принимать аргументы, возвращать значение и присваиваться переменной. Следующая ссылка, содержащая много полезной информации. http://www.groovy-lang.org/closures.html