Способ, которым реализует библиотека Functional , заключается в том, чтобы передать параметры, передаваемые функции "curry ()", в качестве параметров first , которые необходимо передать.Результат функции операции «карри» будет затем принимать любые дополнительные параметры, переданные при вызове, и добавлять их в end списка аргументов.Он не беспокоится о длине списка аргументов, потому что в JavaScript это вообще не исправлено, поэтому в этом нет никакого смысла.
Таким образом:
var curry = myFunction.curry("Tuesday", x + y);
Итак, вызов:
curry(100, true);
будет аналогичен вызову:
myFunction("Tuesday", x + y, 100, true);
Функционал имеет еще одну функцию под названием "partual ()", которая позволяет более контролируемую подстановку параметров.Когда вы вызываете "partal () ", вы передаете фиктивный аргумент (« _ »), чтобы указать, где« дыры »находятся в списке аргументов:
var partialFunc = myFunction.partial("Tuesday", _, 100, true, _, "banana");
Эти два параметра« _ »означают, чторезультирующий «absoluteFunc» должен отбросить первые два передаваемых ему аргумента в эти слоты в списке аргументов:
partialFunc(x + y, "Texas");
, таким образом, похож на вызов:
myFunction("Tuesday", x + y, 100, true, "Texas", "banana");
Я от всей души рекомендую получить эту библиотекуи глядя на код.Это на удивление лаконично и ясно.
Еще одна вещь: важно отметить, что, поскольку JavaScript не является ленивым языком оценки, это не действительно то же самое, что операция "карри"на ленивом функциональном языке, таком как Haskell.Различие состоит в том, что аргументы в «время карри» оцениваются и, следовательно, как бы «готовятся» к результату.На ленивом языке все по-другому.