最初にここに登場した次の追加機能があります。
add
は引数を 1 つしか取りませんが、カリー化とクロージャーの「魔法」により、「無限」回そうすることができます。
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
です。算術演算で使用できるようにしながら、関数の型強制を防ぐ(比較的簡単な)方法はありますか?または、言い換えれば、ボイラープレートをあまり追加せずに (できれば構造を維持しながら) valueOf
(および/または値) を直接変更する簡単な方法はありますか?a
add(x)+y;