Приправляет карри просто способ избежать наследования?

Таким образом, мое понимание приправления карри (на основе ТАК вопросов) - то, что оно позволяет Вам частично установить параметры функции и возвратить "усеченную" функцию в результате.

Если у Вас есть большая волосатая функция, берет 10 параметров и похож

function (location, type, gender, jumpShot%, SSN, vegetarian, salary) {
    //weird stuff
}

и Вы хотите функцию "подмножества", которая позволит Вам иметь дело с предварительными установками для всех кроме jumpShot%, Вы не должны только вспыхивать класс, который наследовался исходной функции?

Я предполагаю то, что я ищу, вариант использования для этого шаблона.Спасибо!

9
задан Alex Mcp 27 April 2010 в 23:18
поделиться

3 ответа

В javascript я выполняю карринг для функций обратного вызова (потому что им нельзя передать какие-либо параметры после их вызова (от вызывающего)

Примерно так:

...
var test = "something specifically set in this function";
onSuccess: this.returnCallback.curry(test).bind(this),

// This will fail (because this would pass the var and possibly change it should the function be run elsewhere
onSuccess: this.returnCallback.bind(this,test),
...

// this has 2 params, but in the ajax callback, only the 'ajaxResponse' is passed, so I have to use curry
returnCallback: function(thePassedVar, ajaxResponse){
   // now in here i can have 'thePassedVar', if 
}

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

1
ответ дан 4 December 2019 в 23:05
поделиться

При программировании в функциональном стиле вы часто связываете аргументы с генерировать новые функции (в данном примере - предикаты) из старых. Псевдокод:

filter(bind_second(greater_than, 5), some_list)

может быть эквивалентен:

filter({x : x > 5}, some_list)

, где {x: x> 5} - определение анонимной функции. То есть он создает список всех значений из some_list , которые больше 5.

1
ответ дан 4 December 2019 в 23:05
поделиться

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

Но позвольте мне привести вам такой пример:

function log_message(log_level, message){}
log_error = curry(log_message, ERROR)
log_warning = curry(log_message, WARNING)

log_message(WARNING, 'This would be a warning')
log_warning('This would also be a warning')
5
ответ дан 4 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: