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
376 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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal