46 lines
1.6 KiB
Markdown
46 lines
1.6 KiB
Markdown
---
|
||
title: Learn About Currying
|
||
localeTitle: Узнайте о карри
|
||
---
|
||
Это акт принятия функции с несколькими аргументами и преобразования ее в эквивалентную функцию, которая принимает один аргумент. Это основано на возврате частично прикладных функций.
|
||
|
||
**оригинал**
|
||
```
|
||
function add (verb, a, b) {
|
||
return "The " + verb + " of " + a + ' and ' + b + ' is ' + (a + b)
|
||
}
|
||
|
||
add('sum', 5, '6')
|
||
//=> 'The sum of 5 and 6 is 11'
|
||
```
|
||
|
||
**Curried Version**
|
||
```
|
||
function addCurried (verb) {
|
||
return function (a) {
|
||
return function (b) {
|
||
return "The " + verb + " of " + a + ' and ' + b + ' is ' + (a + b)
|
||
}
|
||
}
|
||
}
|
||
|
||
addCurried('total')(6)(5)
|
||
//=> 'The total of 6 and 5 is 11'
|
||
```
|
||
|
||
Каррирование вручную было бы невероятным усилием, но его тесная связь с частичным применением означает, что, если вы оставили частичное приложение, вы можете получить currying. Или, если у вас есть currying, вы можете получить левое частичное приложение.
|
||
|
||
Вот функция, которая представляет любую функцию с двумя аргументами:
|
||
```
|
||
function curryTwo (fn) {
|
||
return function (x) {
|
||
return callFirst(fn, x)
|
||
}
|
||
}
|
||
|
||
function add2 (a, b) { return a + b }
|
||
|
||
curryTwo(add2)(5)(6)
|
||
//=> 11
|
||
|
||
``` |