2013-09-06 3 views
3

Я пробовал более функциональный стиль с Javascript, используя Lodash и сочиняю. Я замечаю, что мне иногда нужна функция, которая возвращает значение. Так было интересно, как это называется, поэтому я могу узнать, действительно ли у Lodash этот метод.Что вы называете функцией, которая принимает значение и возвращает функцию, которая возвращает это значение?

var returnFn = function (i) { 
    return function() { 
    return i; 
    }; 
}; 

Пример:

_.compose(doSomething, returnFn({ foo: 'bar' }); 

Вместо того, чтобы:

_.compose(doSomething, function() { 
    return { foo: 'bar' }; 
}); 
+1

Вы говорите о том, что обозначается номенклатурой или шаблоном? или вы хотите вызвать функцию для выполнения? – zsong

+0

В Common Lisp он называется [ПОСТОЯННО] (http://www.lispworks.com/documentation/HyperSpec/Body/f_cons_1.htm). Я не знаю, что я столкнулся с этим в дикой природе. –

ответ

4

Что вы называете функцией, которая принимает значение и возвращает функцию, которая возвращает это значение?

То, что вы, кажется, curryiedidentity function, что в Haskell известен как const. Поскольку он возвращает функцию, это higher order function, возможно, также называется функцией factory. Возвращаемая функция - constant function - это closure, так как она имеет доступ к аргументу внешней функции.

, так что я могу узнать, есть ли у Lodash этот метод.

Нет, это не так. Тем не менее, вы можете легко составить его самостоятельно _.binding_.partial функции _.identity:

var returnFn = _.bind(_.partial, null, _.identity); 

Ваша простая реализация будет много быстрее, хотя ...

_.compose(doSomething, returnFn({ foo: 'bar' })); 

Что вы там делаете только partial application, и вы не должны использовать compose для этого. Перейдите по ссылке

_.partial(doSomething, {foo: 'bar'}); 
2

Функция, которая генерирует другую функцию, называется higher order function, как сказал Инго.

Функция, возвращающая свой первый аргумент, называется identity function.

Смежные вопросы