【问题标题】:Is it possible to have different signature?可以有不同的签名吗?
【发布时间】:2014-08-09 09:26:30
【问题描述】:

我有以下代码:

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);
    }
}

Here is a link to a try Haxe code

如果我尝试编译这段代码,我会得到一个错误:```Duplicate class field declaration : doAdd````

我的问题是,haxe 中是否有两种不同签名的方法?

【问题讨论】:

标签: haxe neko


【解决方案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 的语法有点不同,据我所知仅适用于外部人员。 this thread中有一个例子。

【讨论】:

  • 感谢您的回答,我将尝试使用它。有关信息,我的目标是 neko 平台。
  • @MaximeMangel 不建议这样做。重载只是为了与某些后端的现有后端 API 兼容。这不是做事的粗鲁方式,通常不应该使用。它还可能会在编译阶段(我遇到过)引入一些难以跟踪的错误,这些错误甚至不应该被修复。
  • @stroncium 好的,我会想办法避免过载所以
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2017-05-30
  • 1970-01-01
相关资源
最近更新 更多