Somme incrémentielle de valeurs avec une fonction de curry variadique
Pouvons-nous créer une somme de fonction JavaScript qui se comporte comme suit ?
sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10
En un mot, la fonction devrait nous permettre d'accumuler une somme en passant à plusieurs reprises des informations supplémentaires valeurs.
Au départ, on nous avait dit qu'une telle fonction était impossible en JavaScript. Cependant, une approche alternative a émergé : ajouter un signe devant la fonction somme.
+sum(1)(2)(3)(4)
Le signe, lorsqu'il est utilisé conjointement avec une fonction, contraint la valeur renvoyée par la fonction à un nombre. Ainsi, dans ce cas, la fonction sum renvoie effectivement des nombres qui sont ensuite incrémentés à chaque appel ultérieur.
Pour obtenir le comportement souhaité, nous pouvons utiliser une technique de curry dans notre fonction sum. Voici à quoi ressemble l'implémentation :
function sum(n) { var v = function(x) { return sum(n + x); }; v.valueOf = v.toString = function() { return n; }; return v; } console.log(+sum(1)(2)(3)(4)); // Output: 10
Cette implémentation enveloppe la fonction sum dans la variable v, qui est ensuite renvoyée. La fonction v nous permet d'ajouter progressivement des valeurs à la variable n. En forçant v à un nombre à l'aide de l'opérateur, nous pouvons obtenir la somme accumulée.
Dans l'exemple, l'instruction console.log génère 10, qui est la somme de 1, 2, 3 et 4.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!