Maison > interface Web > js tutoriel > Comment une fonction JavaScript au curry peut-elle additionner les valeurs de manière incrémentielle ?

Comment une fonction JavaScript au curry peut-elle additionner les valeurs de manière incrémentielle ?

Susan Sarandon
Libérer: 2024-11-28 14:48:16
original
425 Les gens l'ont consulté

How Can a Curried JavaScript Function Incrementally Sum Values?

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
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal