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.
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) }
go considère une méthode de type foo
有一个名为 foo()
au lieu de la remplacer par le nom de la méthode transmis.
Oui, c'est possible. Vous avez 2 (3) choix :
expression foo.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)
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 sur go terrain de jeu) :
a b c
Si f
是 foo
类型的值,则表达式 f.a
生成 func()
类型的函数值,其隐式接收者值为 f
.
var f foo bar := func(m func()) { m() } bar(f.a) bar(f.b) bar(f.c)
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 le go terrain de jeu).
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 package string
值传递,然后使用 reflect
pour 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")
Essayez-le sur le go 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!