Ответ 1
Говоря, что x.(T)
переменная x
должна быть типа интерфейса, потому что только для переменных типа интерфейса динамический тип не фиксирован. И хотя Node
является интерфейсом, []Node
нет. Срез - это отдельный, неинтерфейсный тип. Поэтому просто не имеет смысла предполагать, что срез значений интерфейса также является интерфейсом.
Тип Node
имеет четкое определение в вашем коде и, таким образом, является интерфейсом. Вы указали список методов для него. Тип []Node
не такой. Какие методы он определяет?
Я понимаю, откуда вы пришли. Это может быть полезным ярлыком, но просто не имеет смысла. Это похоже на то, что syms.Method()
работает, когда syms
type []Symbol
и Method
для Symbol
.
Замена строки 47 этим кодом делает то, что вы хотите:
symbols := make([]Symbol, len(args))
for i, arg := range args { symbols[i] = arg.(Symbol) }
fixed, rest := parseFormals(symbols)