为了账号安全,请及时绑定邮箱和手机立即绑定

使用函数名作为参数

使用函数名作为参数

Go
喵喔喔 2021-06-04 18:23:11
在 Go 中,您可以将函数作为参数传递,例如callFunction(fn func). 例如:package mainimport "fmt"func example() {    fmt.Println("hello from example")}func callFunction(fn func) {    fn()}    func main() {    callFunction(example)}但是当它是结构的成员时是否可以调用函数?下面的代码会失败,但给你一个我在说什么的例子:package mainimport "fmt"type Example struct {    x int    y int}var example Examplefunc (e Example) StructFunction() {    fmt.Println("hello from example")}func callFunction(fn func) {    fn()}    func main() {    callFunction(example.StructFunction)}(我知道我在那个例子中要做的事情有点奇怪。我遇到的确切问题并没有很好地缩小到一个简单的例子,但这就是我的问题的本质。但是我也很感兴趣这是从学术角度)
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

Go 1.0 不支持使用绑定方法作为函数值。Go 1.1 将支持它,但在那之前您可以通过闭包获得类似的行为。例如:


func main() {

    callFunction(func() { example.StructFunction() })

}

它不太方便,因为您最终复制了函数原型,但应该可以解决问题。


查看完整回答
反对 回复 2021-06-07
?
交互式爱情

TA贡献1712条经验 获得超3个赞

我修复了你的编译错误。


package main


import "fmt"


type Example struct {

    x, y float64

}


var example Example


func (e Example) StructFunction() {

    fmt.Println("hello from example")

}


func callFunction(fn func()) {

    fn()

}


func main() {

    callFunction(example.StructFunction)

}

输出:


hello from example


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信