Можно ли иметь другую подпись?

У меня есть следующий код:

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?

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 немного отличается и работает только для внешних, насколько я понимаю. В этой теме есть пример.

Другие вопросы по тегам