다음과 같은 더하기 함수가 있습니다. 원래는 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
값)을 직접 수정할 수있는 간단한 방법이 있습니까?
사실 그건 나쁜 생각이 아닙니다. 나는 그것이'+'연산자가 기능하는 방식에 의해 제한 될 것이라고 생각했지만, 아마도 add 함수가 그것과 어떻게 상호 작용하는지에 대한 해결 방법이 있을지 확실치 않았다. 이것은 좋은 해결책 인 것처럼 보인다. 이것은 단순히 수행 할 수 있을지 궁금해하는 더 많은 관심사 질문이므로 예제에 설명 된 내용 외의 특정 사례에 많은 투자를하지 않았습니다. – Brad
도움이 되었다면 기쁘다! '+'연산자의 경우, 다른 화학 물질과 금처럼 상호 작용하는 것을 좋아하지 않는 것처럼 보입니다. 그것은 참을성있게 왼쪽과 오른쪽에있는 피연산자가 평가 될 때까지 기다리고 그 다음에 오르고 훈련되고 수행되는 것을 수행합니다. :) 종류. –