2010-12-09 8 views
12

나는 curry 기능이 방법을 구현했습니다. 11이 예상 된 결과가 아닙니까? 내 코드에 어떤 문제가 있습니까?자바 스크립트 카레 기능

참고 : add 기능 로그에 console.log(x, y)을 사용하십시오. 1 10. 왜 undefined을 반환하는지 이해가 안됩니다.

+2

사실 카레가 아니기 때문에 부분적으로 적용됩니다. – jcubic

+0

정말로 오래된 스레드를 되 살리고 있다는 것을 알고 있습니다 만,''arguments ''에 대한 인자로'[1]'을 적용하면 어떻게됩니까? –

+1

전달 된 함수를 인수 목록에서 제거합니다! – monoceres

답변

12

카레 기능에 return이 누락되었습니다.

e.e.

function curry(func) { 
    var initial_args = [].slice.apply(arguments, [1]); 
    var func_args_length = func.length; 

    function curried(args) { 
     if (args.length >= func_args_length) { 
      return func.apply(null, args); 
     } 

     return function() { 
      return curried(args.concat([].slice.apply(arguments))); 
     }; 
    } 

    return curried(initial_args); 
} 

이 카레 함수가 함수의 카레 버전을 생성 : 이것은 카레 함수의 예입니다 :

+0

고마워요, 그건 내 바보 같았어요. – dheerosaur

+3

@dheerosaur - 우리 모두 바보 같아도 걱정하지 마십시오. :) – ChaosPandion

+0

그것은 모두에게 일어납니다 :) –

10

작동하는 것 같다

return function() { 
    return fn.apply(null, args.concat(slice.apply(arguments))); 
}; 

. 새 기능에 부분적으로 매개 변수를 적용 할 수 있습니다. 부분적인 각 응용 프로그램의 경우 나머지 매개 변수를 사용하는 함수를 반환합니다. 원래 함수의 모든 매개 변수가 적용되면 값을 반환합니다.

+1

부분적인 응용이 아닌 진짜 카레이기 때문에 +1. – jcubic