Как я могу передать метод интерфейса для работы? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть следующий интерфейс:

type visitable interface {
    getName() string
    getLookupMessage() string
}

Я хочу создать функцию с такой сигнатурой, как apply(visitable []visitable, function ???), которая принимает функцию посетимого (например, getName или getLookupMessage) в качестве второго аргумента. Могу ли я технически сделать это? И если да, то как?

1 Ответ

2 голосов
/ 07 февраля 2020

Да, в этом конкретном c случае вы можете использовать выражения метода . Это работает, потому что оба метода интерфейса имеют одинаковую сигнатуру, то есть тип visitable.getName и visitable.getLookupMessage равен func(visitable) string:

package main

type visitable interface {
    getName() string
    getLookupMessage() string
}

func apply(vs []visitable, m func(visitable) string) {
    for _, v := range vs {
        m(v)
    }
}

func main() {
    apply(nil, visitable.getName)
    apply(nil, visitable.getLookupMessage)
}

Однако, учитывая, насколько тривиальным является apply, неясно, почему это было бы полезно, особенно учитывая, что это не работает для методов с разными сигнатурами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...