栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将方法参数传递给函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将方法参数传递给函数

是的,有可能。您有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上尝试一下。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号