В чем разница между монадой и замыканием?

Я немного запутался, читая определение между ними. Могут ли они на самом деле пересекаться с точки зрения определения? или я полностью потерялся? Благодарю.

4 ответа

Решение

Замыкания, как это слово обычно используется, - это просто функции (или блоки кода, если хотите), которые вы можете обрабатывать как часть данных и передавать другим функциям и т. Д. ("Закрытый" бит - это тот, где вы в конце концов, вызовите его, он будет вести себя так же, как если бы вы назвали его там, где он был первоначально определен). Монада (примерно) больше похожа на контекст, в котором функции могут быть последовательно соединены вместе, и управляет тем, как данные передаются от одной функции к другой.

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

Лично я бы попытался получить четкое представление об определении замыканий (по сути, это часть логики, которая также отражает ее окружение, т.е. локальные переменные и т. Д.), Прежде чем беспокоиться о монадах. Они могут прийти позже:)

Существуют различные вопросы о замыканиях в переполнении стека, и лучший способ помочь вам будет зависеть от того, на какой платформе вы работаете. Например, есть:

Лично я только начинаю "впадать" в монады (благодаря книге, в которой я помогаю). Однажды я перейду к написанию статьи о них, когда почувствую, что достаточно хорошо их понимаю:)

"Закрытие" - это объект, содержащий 1) функцию и 2) значения ее свободных переменных, в которых он построен.

"Монада" - это класс функций, которые могут быть составлены определенным образом, т. Е. С помощью связанных операторов функций связывания и возврата более высокого порядка, для создания других функций.

Я думаю, что монады немного сложнее, чем замыкания, потому что замыкания - это просто блоки кода, которые помнят что-то с точки зрения своих определений, а монады - это конструкция для "скручивания" обычной операции композиции функций.

Другие вопросы по тегам