Имеет ли язык Go перегрузку функции/метода?



Я портирую библиотеку C, чтобы пойти. Функция C (с varargs) определяется следующим образом:



curl_easy_setopt(CURL *curl, CURLoption option, ...); 


поэтому я создал обертку C функции:



curl_wrapper_easy_setopt_str(CURL *curl, CURLoption option, char* param);
curl_wrapper_easy_setopt_long(CURL *curl, CURLoption option, long param);


если я определяю функцию в Go следующим образом:



func (e *Easy)SetOption(option Option, param string) {
e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(param)))
}

func (e *Easy)SetOption(option Option, param long) {
e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(param)))
}


компилятор Go жалуется:



*Easy·SetOption redeclared in this block


так идет перегрузка функции поддержки (метода), или эта ошибка означает что-то еще?

626   3  
go

3 ответов:

нет это не так.

посмотреть перейти язык FAQ, а конкретно в разделе перегрузка.

метод отправки упрощается, если ему не нужно делать сопоставление типов, а также. Опыт работы с другими языками показал нам, что иногда полезно иметь различные методы с одинаковым именем, но разными сигнатурами, но это также может быть запутанным и хрупким на практике. Соответствие только по имени и требованию согласованность в типах была главным упрощающим решением в системе типов Go.

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

обновление: 2016-04-07

в то время как Go по-прежнему не имеет перегруженных функций (и, вероятно, никогда не будет), самая полезная функция перегрузки-вызов функции с необязательными аргументами и вывод значений по умолчанию для них опущенные могут быть смоделированы с использованием вариационной функции, которая с тех пор была добавлена. Но это происходит при потере проверки типа.

например:http://changelog.ca/log/2015/01/30/golang

согласно этому, это не так:http://golang.org/doc/go_for_cpp_programmers.html

на Концептуальные Различия он говорит:

"Go не поддерживает перегрузку функций и не поддерживает пользовательские операторы."

func (e *Easy)SetOption(any []interface{})

процесс преобразует параметры в this-empty interface{} .

первый тип преобразования, а затем внутренние логические процессы.

http://zerousm99.blogspot.kr/2015/01/golang-overload.html

Comments

    Ничего не найдено.