Возможна ли другая подпись?

У меня такой код:

class Test {
    static function main() {
        trace("Haxe is great!");
        var api:Api = new Api();
        api.doAdd(1,1);
    }
}

class Api {

    public function new(){}

    public function doAdd( x : Int, y : Int ) {
        trace( x + y );
    }

    public function doAdd( x : Int, y : Int , z : Int) {
        trace( x + y + z);
    }
}

Вот ссылка на пробный код Haxe

Если я попытаюсь скомпилировать этот код, я получаю сообщение об ошибке: `` Повторяющееся объявление поля класса: doAdd```

Мой вопрос: есть ли в haxe два метода с разными сигнатурами?


person Maxime Mangel    schedule 09.08.2014    source источник
comment
Я погуглил, и похоже, что он не поддерживается groups.google. ru / forum / #! msg / haxelang / feujdbvrrrQ / 1rroSz4eHncJ   -  person ta.speot.is    schedule 09.08.2014


Ответы (1)


Для целей Java и C # работает следующее:

@:overload
public function doAdd(x:Int, y:Int) {
    trace(x + y);
}

@:overload
public function doAdd(x:Int, y:Int, z:Int) {
    trace(x + y + z);
}

Для других целей синтаксис @:overload немного отличается и работает только для externs, насколько я понимаю. Пример есть в этой ветке.

person Gama11    schedule 09.08.2014
comment
Спасибо за ответ, я постараюсь с этим поработать. Для информации я нацелен на платформу neko. - person Maxime Mangel; 09.08.2014
comment
@MaximeMangel не рекомендовал бы это. Перегрузка существует только для совместимости с существующими серверными API-интерфейсами для некоторых серверных приложений. Это не хакерский способ делать что-то, и его обычно не следует использовать. Это также может привести к некоторым трудно отслеживаемым ошибкам на этапе компиляции (с которыми я столкнулся), которые даже не должны быть исправлены. - person stroncium; 10.08.2014
comment
@stroncium Хорошо, я постараюсь найти способ избежать перегрузок, поэтому - person Maxime Mangel; 10.08.2014