En programmation fonctionnelle, le currying est une technique permettant de transformer une fonction qui prend plusieurs arguments en une série de fonctions imbriquées qui prennent chacune un seul argument. Cela permet une application partielle, où une fonction peut être appliquée à un sous-ensemble de ses arguments pour produire une nouvelle fonction qui prend les arguments restants.
L'application partielle n'est pas directement pris en charge dans Go, mais cela peut être réalisé en utilisant des fermetures. Une fermeture est une fonction qui conserve l'accès aux variables de sa portée englobante même après la sortie de la portée. En renvoyant une fermeture d'une fonction, nous pouvons créer une fonction partiellement appliquée.
Par exemple, la fonction suivante renvoie une fermeture qui ajoute un nombre donné à son entrée :
func add(a int) func(b int) int { return func(b int) int { return a + b } }
Nous peut ensuite utiliser cette fermeture pour appliquer partiellement la fonction d'ajout :
add2 := add(2) fmt.Println(add2(3)) // prints 5
La fonction currying peut également être réalisée dans Go en utilisant des fermetures. La fonction suivante currie une fonction qui prend plusieurs arguments :
func curry(f func(...int) int) func(int) func(...int) int { return func(a int) func(...int) int { return func(b... int) int { args := append([]int{a}, b...) return f(args...) } } }
Cette fonction renvoie une fonction qui prend un argument et renvoie une nouvelle fonction qui prend les arguments restants. Nous pouvons ensuite utiliser cette fonction pour curry n'importe quelle fonction :
add := curry(func(a, b, c int) int { return a + b + c }) add2 := add(2) add3 := add3(3) fmt.Println(add3(4)) // prints 9
Bien que Go ne prenne pas nativement en charge les applications partielles ou le curry de fonctions, ces techniques peuvent être réalisées à l'aide de fermetures. Cela permet aux programmeurs Go de profiter des concepts de programmation fonctionnelle d'application partielle et de curry, même si le langage lui-même ne les prend pas directement en charge.
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!