Передача функции-члена как ошибка компиляции аргумента - PullRequest
0 голосов
/ 29 марта 2019

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

2 голосов
/ 29 марта 2019
  1. метод (m *M) foo() не соответствует сигнатуре type StateFunc func(*M) StateFunc

  2. foo - метод, у него есть получатель *MВы не можете использовать его без получателя.

я предлагаю изменить foo:

func foo(*M) StateFunc {
    return nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...