Как встроенная функция Golang «заставляет» выполнять проверку длины аргумента для другого типа? - PullRequest
0 голосов
/ 11 января 2019

В документе API показывает, make принимает тип и параметр IntegerType переменного размера.

func make(t Type, size ...IntegerType) Type

Чтобы сделать массив, я могу передать 3 параметра, таких как make([]int, 3, 5)

но когда я пытаюсь сделать карту make(map[int]int, 3, 5) он выскакивает too many arguments to make(map[int]int) когда я компилирую.

Это что-то связано с компилятором? И возможно ли реализовать это поведение для моих собственных функций?

1 Ответ

0 голосов
/ 11 января 2019

Компилятор обладает специальными знаниями make и других встроенных функций.

Компилятор обеспечивает допустимое количество аргументов для вида значения, которое инициализируется make. Компилятор не будет принудительно устанавливать количество аргументов для пользовательских функций. Более того, пользовательские функции не могут иметь тип в качестве аргумента.

Лучшее, что вы можете сделать, это проверить во время выполнения:

func example(a ArgType, size ...int) returnType {
    if len(size) != 2 {
       panic("expected two size values")
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...