猿问

使用函数名作为参数

在 Go 中,您可以将函数作为参数传递,例如callFunction(fn func). 例如:


package main


import "fmt"


func example() {

    fmt.Println("hello from example")

}


func callFunction(fn func) {

    fn()

}    


func main() {

    callFunction(example)

}

但是当它是结构的成员时是否可以调用函数?下面的代码会失败,但给你一个我在说什么的例子:


package main


import "fmt"


type Example struct {

    x int

    y int

}


var example Example


func (e Example) StructFunction() {

    fmt.Println("hello from example")

}


func callFunction(fn func) {

    fn()

}    


func main() {

    callFunction(example.StructFunction)

}

(我知道我在那个例子中要做的事情有点奇怪。我遇到的确切问题并没有很好地缩小到一个简单的例子,但这就是我的问题的本质。但是我也很感兴趣这是从学术角度)


喵喔喔
浏览 178回答 3
3回答

尚方宝剑之说

Go 1.0 不支持使用绑定方法作为函数值。Go 1.1 将支持它,但在那之前您可以通过闭包获得类似的行为。例如:func main() {    callFunction(func() { example.StructFunction() })}它不太方便,因为您最终复制了函数原型,但应该可以解决问题。

交互式爱情

我修复了你的编译错误。package mainimport "fmt"type Example struct {    x, y float64}var example Examplefunc (e Example) StructFunction() {    fmt.Println("hello from example")}func callFunction(fn func()) {    fn()}func main() {    callFunction(example.StructFunction)}输出:hello from example
随时随地看视频慕课网APP

相关分类

Go
我要回答