Maison> développement back-end> Golang> le corps du texte

Passer les paramètres de la méthode à la fonction

王林
Libérer: 2024-02-14 08:21:08
avant
965 Les gens l'ont consulté

Passer les paramètres de la méthode à la fonction

Dans le développement PHP, transmettre des paramètres de méthode aux fonctions est une exigence courante. En passant des paramètres aux fonctions, nous pouvons exploiter et traiter les paramètres à l'intérieur de la fonction, obtenant ainsi un code plus flexible et réutilisable. Dans cet article, l'éditeur PHP Baicao présentera comment transmettre correctement les paramètres de méthode aux fonctions et partagera quelques conseils pratiques et précautions pour aider les développeurs à mieux comprendre et appliquer ce concept de programmation important. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des références et des conseils précieux.

Contenu de la question

Je suis curieux de savoir si cela est possible en go. J'ai un type avec plusieurs méthodes. Est-il possible d'avoir une fonction qui prend un paramètre de méthode et l'appelle ensuite pour ce type ?

Voici un petit exemple de ce que je souhaite :

package main import ( "fmt" ) type Foo int func (f Foo) A() { fmt.Println("A") } func (f Foo) B() { fmt.Println("B") } func (f Foo) C() { fmt.Println("C") } func main() { var f Foo bar := func(foo func()) { f.foo() } bar(A) bar(B) bar(C) }
Copier après la connexion

go considère une méthode de typefoo有一个名为foo()au lieu de la remplacer par le nom de la méthode transmis.

Solution de contournement

Oui, c'est possible. Vous avez 2 (3) choix :

Spécification : expression de méthode

expressionfoo.a产生一个与a等效的函数,但具有显式接收器作为其第一个参数;它有签名func(f foo).

var foo foo bar := func(m func(f foo)) { m(foo) } bar(foo.a) bar(foo.b) bar(foo.c)
Copier après la connexion

Ce récepteur de méthode est explicite. Vous transmettez simplement le nom de la méthode (et son type) àbar(),并且在调用它时,您必须传递实际的接收者:m(f).

Sortie comme prévu (essayez surgo terrain de jeu) :

a b c
Copier après la connexion

Spécification : valeur de la méthode

Siffoo类型的值,则表达式f.a生成func()类型的函数值,其隐式接收者值为f.

var f foo bar := func(m func()) { m() } bar(f.a) bar(f.b) bar(f.c)
Copier après la connexion

Veuillez noter que la méthode Receiver ici est implicite, elle est la même que celle qui est transmise àbar()的函数值一起保存,因此无需显式指定即可调用它:m().

Le résultat est le même (essayez-le sur lego terrain de jeu).

(Pour être complet :Réflexion)

Inférieur à la solution précédente (en termes de performances et de "sécurité"), mais vous pouvez transmettre le nom de la méthode sous forme de packagestring值传递,然后使用reflectpour appeler la méthode par ce nom. Cela pourrait ressembler à ceci :

var f Foo bar := func(name string) { reflect.ValueOf(f).MethodByName(name).Call(nil) } bar("A") bar("B") bar("C")
Copier après la connexion

Essayez-le sur lego terrain de jeu.

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:stackoverflow.com
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 téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!