Я моделирую реализацию конечного автомата, изложенную в этом выступлении Роба Пайка 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)
}
Я бы ожидал, что он скомпилируется, но я не знаю правильный синтаксис, чтобы это сработало.