将方法参数传递给函数

将方法参数传递给函数,第1张

方法参数传递给函数

是的,有可能。您有2(3)个选项:

规范:方法表达式

该表达式

Foo.A
产生的功能
A
与第一个参数等效,但具有一个显式接收器。它有签名
func(f Foo)

var f Foobar := func(m func(f Foo)) {    m(f)}bar(Foo.A)bar(Foo.B)bar(Foo.C)

在这里,方法接收器是显式的。您只需将方法名称(具有它所属的类型)传递给

bar()
,并且在调用它时,您必须传递实际的接收者:
m(f)

预期的输出(在Go Playground上尝试):

ABC
规格:方法值

如果

f
是type的值
Foo
,则表达式会
f.A
产生
func()
具有隐式接收者值的type的函数值
f

var f Foobar := func(m func()) {    m()}bar(f.A)bar(f.B)bar(f.C)

请注意,这里的方法接收器是隐含的,它被保存与传递给函数的值

bar()
,所以它被称为没有明确指定它:
m()

输出是相同的(在Go Playground上尝试)。

(出于完整性考虑:反射)

不如以前的解决方案(在性能和“安全性”上都不错),但是您可以将方法的名称作为

string
值传递,然后使用该
reflect
包使用该名称来调用方法。它可能看起来像这样:

var f Foobar := func(name string) {    reflect.ValueOf(f).MethodByName(name).Call(nil)}bar("A")bar("B")bar("C")

在Go Playground上尝试一下。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5086510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存