2014-09-11 4 views
3

메소드를 카레 함수로 변환하는 가장 우아한 방법은 무엇입니까? Underscore/Lo-dash 또는 Ramda와 같은 libs에서이를 지원합니까? 인수의 고정 된 수의 경우JavaScript에서 메소드를 (카레) 함수로 사용하기

지금이 권리를하고 있어요 :뿐만 아니라

var a2b = fn2('replace', 'a', 'b') 
a2b('abc') 
=> 'bbc' 

: 같은 코드를 허용

var fn2 = _.curry(function (m, a1, a2, obj) { 
    return obj[m].call(obj, a1, a2); 
}); 

var nl2_ = fn2('replace', '<br>') 
nl2_('\n', 'some<br>html') 
=> 'some\nhtml' 
+0

질문이 무엇인지 잘 모르겠습니다. lo-dash는 분명히'curry'를 지원합니다. –

+0

카레는 절반 만 작업을 수행하고 메서드를 함수로 변환하지 않습니다. – estolua

+0

"메서드를 함수로 변환하지 않습니다"라는 것은 정확하게 무엇을 의미합니까? –

답변

4

당신 임의의 방법으로 메소드에 대한 접근 방식을 쉽게 확장 할 수 있습니다.

당신은 또한 Ramda에 대해 질문했기 때문에
> var replace = curryMethod(String.prototype.replace) 
> replace("a", "b", "abc") 
"bbc" 
> var a2b = replace("a", "b") 
> a2b("abc") 
"bbc" 

function curryMethod(m, a) { 
    if (a !== ~~a) a = m.length; 
    return _.curry(function() { 
     return m.apply(arguments[a], Array.prototype.slice.call(arguments, 0, -1)); 
    }, a+1); 
} 

, 나는 단지 신속하게 API를 스캔하지만, 당신이 찾고있는 정확하게 것 같다 R.invoker function을 발견했습니다.

+1

여기에 [arguments 객체]에 대한 자세한 정보가 있습니다 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments) – mrucci

+0

완벽한,'R.invoker'가 미끄러 져야합니다. 내 눈은 뭔가 다른 것을하는'_.invoke'와의 유사성 때문입니다. – estolua