2015-12-21 2 views
1

R обозначает библиотеку Ramda.js, похожую на Underscore.jsПереходя два аргумента в функцию обратного вызова .map

var test = [ 
    {p1: 1} 
]; 

var get = R.curry(function(prop, obj) { return obj[prop]; }); 
console.log(R.map(get('p1'), test)); 

, что я знаю об обратном вызове R.map, что он принимает только один аргумент, но здесь мы передали два аргумента prop, obj и он работает?

Мы не использовали obj, поэтому он должен быть неопределенным -> return undefined [prop] Право?

этот код доказать, что отображение обратного вызова принимает только один аргумент

var test = [ 
    {p1: 1} 
]; 

function fn(arg1, arg2) { 
    return arg1 + ' ' + arg2 + '\n'; 
} 

console.log(R.map(fn, test)); 

результат

["[object Object] undefined"] 

ответ

3

Это работает, потому что get является кэрри функция. Это означает, что get('p1') возвращает функцию, которая принимает один аргумент. В этом случае она возвращает функцию как это:

function(obj) { return obj['p1']; }); 

Это позволяет ему быть переданы функции R.map.

Чтобы понять каррирование, то википедии статья довольно звездный: https://en.wikipedia.org/wiki/Currying

+0

Оу, ничего себе, что так так хорошо, функциональное программирование является настолько мощным, человек я очень ценю вашу помощь. – Focus

+0

Вы очень приветствуетесь :) – Hans

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