#go
#Вперед
Вопрос:
Я моделирую реализацию конечного автомата, описанную в этом докладе Робом Пайкомhttps://www.youtube.com/watch?v=HxaD_trXwREamp;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 amp;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
-
foo
это метод, у него есть приемник*M
, вы не можете использовать его без приемника.
мое предложение состоит в том, чтобы изменить foo
:
func foo(*M) StateFunc {
return nil
}