gpt4 book ai didi

go - 将成员函数作为参数传递编译错误

转载 作者:IT王子 更新时间:2023-10-29 02:35:28 27 4
gpt4 key购买 nike

我正在为 Rob Pike 的这次演讲中概述的状态机实现建模 https://www.youtube.com/watch?v=HxaD_trXwRE&t=1830s而且我无法编译它。我提供了一个失败的小样本。

调用:m := New(foo)失败

./main.go:31:11: undefined: foo

我试过了

      m := New(M.foo)
m := New(foo(*M))

我不知道正确的语法。

package main

type StateFunc func(*M) StateFunc

type M struct {
start StateFunc
}

func New(start StateFunc) *M {
return &M{
start: start,
}
}

func (m *M) foo() StateFunc {
return nil
}

func (m *M) Start() {
go m.run()
}

func (m *M) run() {
state := m.start
for state != nil {
state = state(m)
}
}

func main() {
m := New(foo)
}

我希望它能编译,但我不知道使它工作的正确语法。

最佳答案

  1. 方法 (m *M) foo()type StateFunc func(*M) StateFunc 的签名不匹配

    /li>
  2. foo 是一个方法,它有一个接收者*M,没有接收者就不能使用它。

我的建议是修改foo:

func foo(*M) StateFunc {
return nil
}

关于go - 将成员函数作为参数传递编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com