В чем разница между монадой и замыканием?
Вопрос
я немного сбит с толку, читая определение между этими двумя понятиями.Могут ли они действительно пересекаться с точки зрения определения?или я совсем заблудился?Спасибо.
Решение
Замыкания в том смысле, в каком это слово обычно используется, — это просто функции (или блоки кода, если хотите), которые вы можете рассматривать как часть данных и передавать другим функциям и т. д.(«закрытый» бит заключается в том, что где бы вы его ни вызвали, он ведет себя так же, как если бы вы вызвали его там, где он был изначально определен).Монада (примерно) больше похожа на контекст, в котором функции могут быть последовательно объединены в цепочку, и контролирует передачу данных от одной функции к другой.
Другие советы
Они совершенно разные, хотя монады часто использовать замыкания для захвата логики.
Лично я бы постарался уточнить определение замыканий (по сути, это часть логики, которая также фиксирует свое окружение, т.е.локальные переменные и т. д.), прежде чем беспокоиться о монадах.Они могут прийти позже :)
В Stack Overflow есть разные вопросы о замыканиях. Самый лучший из них будет зависеть от того, на какой платформе вы работаете.Например, есть:
Лично я только начинаю «вникать» в монады (спасибо книге, над которой я помогаю).Когда-нибудь я напишу о них статью, когда почувствую, что понимаю их достаточно хорошо :)
«Замыкание» — это объект, содержащий 1) функцию и 2) значения его свободных переменных, в которых он создан.
«Монада» — это класс функций, которые можно составить определенным образом, т.е.с помощью связанного связывать и возвращаться операторы функций более высокого порядка для создания других функций.
Я думаю, что монады немного сложнее замыканий, потому что замыкания — это просто блоки кода, которые запоминают что-то с точки зрения своих определений, а монады — это конструкция для «подкручивания» обычной операции композиции функций.