2016-06-03 6 views
0

다음과 같은 더하기 함수가 있습니다. 원래는 here으로 나타났습니다. add은 단 하나의 인수 만 사용하지만, 카레와 클로저의 '마법'을 통해 '무한'횟수만큼 수행 할 수 있습니다.타입 연산 with valueOf 수학 연산

function add (a) { 
    var f = b => add(a + b); 

    f.valueOf =() => a; 

    return f; 
} 

var add4 = add(2)(2); 
var add6 = add4(2); 
var add10 = add6(2)(2); 
var add14 = add10(2)+2; 
//var add16 = add14(2); no longer works because of type conversion above. 
console.log(+add4, +add6, +add10, add14); 
//logs 4, 6, 10, 14 
당신은 기능이 추가 인수를 가지고 갈 수있는 새로운 a 값으로 기능을 만드는 유지할 수 위 볼 수 있습니다

. 이 함수는 var sum = add(x)+y;과 같이 수학 연산을위한 일반 변수로 사용할 수도 있습니다.

그러나 유형 변환이 수행되면 이전 예제의 sum이 기능을 중지하고 숫자로 변환됩니다.

배경이 잘못되었으므로 제 질문은 : add 함수의 유형 강제 변환을 방지하면서도 산술 연산에 사용할 수 있도록 허용하는 (상대적으로 쉬운) 방법이 있습니까? 즉, add(x)+y; 구조를 유지하면서 더 많은 상용구를 추가하지 않고 valueOf (및/또는 a 값)을 직접 수정할 수있는 간단한 방법이 있습니까?

답변

1

당신이 피하려고하는 숫자에 강요하는 것은 add() 함수와 관련이 없다고 생각합니다. 그것은 자바 스크립트의 '+'연산자가 작동하는 방식입니다. 그러므로이 행동을 바꾸는 것은 쉬운 일이 아닙니다. 자바 스크립트 파서가 작동하는 방식을 바꿀 수 있습니다.

add(2)(3) + 8; // 13, number 

이처럼 포장 할 수 있습니다

내가 (이 기능을 사용하는 방법을 정확하게 물론 확실하지) 생각할 수있는 가장 간단한 해결 방법은 항상 여분의 추가() 호출 예와 결과를 래핑하는 것입니다 이 :

add(add(2)(3) + 8); // function with valueOf = 13 

정확한 사용 사례는 확실하지 않습니다.

+0

사실 그건 나쁜 생각이 아닙니다. 나는 그것이'+'연산자가 기능하는 방식에 의해 제한 될 것이라고 생각했지만, 아마도 add 함수가 그것과 어떻게 상호 작용하는지에 대한 해결 방법이 있을지 확실치 않았다. 이것은 좋은 해결책 인 것처럼 보인다. 이것은 단순히 수행 할 수 있을지 궁금해하는 더 많은 관심사 질문이므로 예제에 설명 된 내용 외의 특정 사례에 많은 투자를하지 않았습니다. – Brad

+0

도움이 되었다면 기쁘다! '+'연산자의 경우, 다른 화학 물질과 금처럼 상호 작용하는 것을 좋아하지 않는 것처럼 보입니다. 그것은 참을성있게 왼쪽과 오른쪽에있는 피연산자가 평가 될 때까지 기다리고 그 다음에 오르고 훈련되고 수행되는 것을 수행합니다. :) 종류. –