В чем разница между «закрытием» и «лямбдой»? - PullRequest
747 голосов
/ 21 октября 2008

Может кто-нибудь объяснить? Я понимаю основные концепции, стоящие за ними, но часто вижу, что они используются взаимозаменяемо, и я запутываюсь.

А теперь, когда мы здесь, чем они отличаются от обычной функции?

Ответы [ 11 ]

0 голосов
/ 24 сентября 2018

Это зависит от того, использует ли функция внешнюю переменную или нет для выполнения операции.

Внешние переменные - переменные, определенные вне области действия функции.

  • Лямбда-выражения не сохраняют состояния , поскольку это зависит от параметров, внутренних переменных или констант для выполнения операций.

    Function<Integer,Integer> lambda = t -> {
        int n = 2
        return t * n 
    }
    
  • Закрытия состояние удержания , поскольку для выполнения операций используются внешние переменные (то есть переменная, определенная вне области действия тела функции), а также параметры и константы.

    int n = 2
    
    Function<Integer,Integer> closure = t -> {
        return t * n 
    }
    

Когда Java создает замыкание, она сохраняет переменную n с помощью функции, чтобы на нее можно было ссылаться при передаче другим функциям или где угодно.

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