我正在建模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)
}
我希望它可以编译,但是我不知道使它起作用的正确语法。
答案 0 :(得分:2)
方法(m *M) foo()
与type StateFunc func(*M) StateFunc
的签名不匹配
foo
是一种方法,它有一个接收者*M
,没有接收者就不能使用它。
我的建议是修改foo
:
func foo(*M) StateFunc {
return nil
}