
Продвинутая реализация каррирования
Выше представлен "продвинутый" вариант функции каррирования.
Когда мы запускаем её, есть две ветви выполнения
1. Вызвать сейчас: если количество переданных аргументов
2. Частичное применение: в противном случае
На картинке выше показано, что произойдёт в случае
#разное #каррирование
Выше представлен "продвинутый" вариант функции каррирования.
Когда мы запускаем её, есть две ветви выполнения
if
:1. Вызвать сейчас: если количество переданных аргументов
args
совпадает с количеством аргументов при объявлении функции (func.length
) или больше, тогда вызов просто переходит к ней.2. Частичное применение: в противном случае
func
не вызывается сразу. Вместо этого, возвращается другая обёртка pass
, которая снова применит curried
, передав предыдущие аргументы вместе с новыми. Затем при новом вызове мы опять получим либо новое частичное применение (если аргументов недостаточно) либо, наконец, результат.На картинке выше показано, что произойдёт в случае
sum(a, b, c)
. У неё три аргумента, так что sum.length = 3
.#разное #каррирование