Чи є у мови Go функція / метод перевантаження?


127

Я переношу бібліотеку С на Go. Функція змінного струму (з 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

Так перевантажує функцію підтримки (метод) Go, чи ця помилка означає щось інше?

Відповіді:


165

Ні, це не є.

Див. Поширені питання про мову Go і, зокрема, розділ про перевантаження .

Відправлення методу спрощується, якщо також не потрібно робити відповідність типу. Досвід з іншими мовами говорив нам про те, що використання різних методів з однаковою назвою, але різні підписи іноді було корисним, але це також може бути заплутаним та крихким на практиці. Поєднання лише за назвою та вимагало послідовності типів було головним спрощенням рішення в системі типів Go.

Оновлення: 2016-04-07

Хоча Go все ще не має перевантажених функцій (і, мабуть, ніколи не буде), найкорисніша функція перевантаження, виклик функції з необов'язковими аргументами та виведення за замовчуванням для тих, хто пропущений, може бути змодельований за допомогою варіативної функції, яка з тих пір була додана. Але це відбувається при втраті перевірки типу.

Наприклад: http://changelog.ca/log/2015/01/30/golang


20

Відповідно, це не так: http://golang.org/doc/go_for_cpp_programmers.html

У розділі Концептуальні відмінності сказано:

"Go не підтримує функцію перевантаження та не підтримує визначені користувачем оператори."


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.