В чем причина, учитывая, что (переменная) функция
func varargs(n ...int) {}
это можно назвать как
varargs(1, 2, 3, 4) // Fixed number of arguments
, но не с массивом :
a := [4]int{1, 2, 3, 4} // Fixed number of elements
varargs(a...) // Error: cannot use (type [4]int) as type []int in argument
Я понимаю, почему
var s []int = a
не сработает: предотвращает случайное неправильное использование, требует ручной нарезки:
s := a[:]
Но почему это ограничение распространяется на вызовы функций с переменными числами?
Бонусный вопрос:
И наоборот, зачем звонить
func fourargs(w, x, y, z int) {}
с массивом из 4 элементов как
fourargs(a...) // Error: not enough arguments in call have ([4]int...)
// want (int, int, int, int)
также быть запрещено?
Это может быть проверено типом во время компиляции.