CURRY 는 특정함수의 인자를 모두 가지고 실행하는게 아니고,
인자중 일부 인자만 가진 일부함수를 만든다음, 그걸 이용해서 원래의 함수를 실행하는 방법이다.
function _curry(fn) {
return function (a){
return function (b) {
return fn(a,b);
}
}
}
var add = _curry(function(argA , argB) {
return a+b
});
add 함수는 단지 _curry 함수가 function(argA,argB) 인 상태이다.
var add10 = add(10); // 여기서는 그냥 functon(a) 의 상태값만 가진다.
var result = add10(5): // add10 함수 즉, function(a)의 내부 function (b) 에 5를 전달해주고, return 으로 _curry 함수가 원래 가지고 있던 function(argA , argB) {return a+b} 를 리턴해 준다.
이걸 어따쓴다고?
--------------------
function _curryr(fn) {
return function (a){
return function (b) {
return fn(b,a);
} }}
var _get = _curryr(function(argA , argB) {
return argA=null ? undefined: argA[argB]
});
var user = [
{name:"name1", spec:"eng1", age:10},
{name:"name2", spec:"eng2", age:30},
{name:"name3", spec:"eng3", age:31}
];
function _map(list, mapper) {
console.log(mapper);
var new_list=[];
for(var i=0; i < list.length; i++) {
//console.log(list[i]);
new_list.push(mapper(list[i]));
//위와 같은 거 , new_list.push(_get("name")(list[i]));
}
return new_list;
}
console.log(_map(user, _get("name")));
배열의 경우
var _length = _get("length");
_length 는 어떤 값이 들어올지 모른다. 그냥 length 값만 되돌려줄 준비만 한다.
var size = _length(array);
array 의 length 값을 돌려준다.
array 가 null 이 와도 _get함수에서 걸러주기 때문에 for 문 등에서 에러가 나지 않는다.
var _length=_get("length");
var b=null;
for(var i=0; i < _length(b); i++) {
console.log(b[i]);
}
null 인데도 에러없다.
0 comments:
댓글 쓰기