在 @:external 内联抽象方法中使用 throw 的编译错误

Compilation error with an throw used in an @:external inline abstract method

这个问题的修正很简单:正确更新Haxe到3.2.0

就我而言,更新期间发生了一些错误,因此它在 3.1.3 上无法完全正常工作。


我在编译这段代码时遇到了一些麻烦:

interface MyInterface {
    public function getBits(pos:Int, size:Int, signed:Bool=false):Int;

    public function setBits(pos:Int, value:Int, size:Int, signed:Bool=false):Int;
}

class MyClass implements MyInterface {
    public function new() {}

    public function getBits(pos:Int, size:Int, signed:Bool=false):Int Make.Unfinished("getBits");

    public function setBits(pos:Int, value:Int, size:Int, signed:Bool=false):Int Make.Unfinished("setBits");
}

enum AbstractError {
    Unfinished(name:String);
}

abstract Make(Void) {
    @:extern public inline static function Unfinished(name:String="") throw AbstractError.Unfinished(name);
}

这是我的程序的一个小版本,它在 this 上工作,但在我为 Neko 运行时编译时却没有。 实际上,我在尝试编译时收到此编译时错误:

Void should be Int

Missing return Int

而且,对于 MyClass.getBits 和 MyClass.setBits ... 你对此有什么解释吗?

我认为外部方法 cannot/should 不会被标记为内联。你为什么这样做?删除 inline 后是否有效?

此外,我注意到您在 MyClass 中的 getBits 和 setBits 函数之后添加了一个枚举。这样做的目的是什么?这些你是不是少了一个return声明?如果是这样,那么 return 类型应该是 AbstractError.

我在 GitHub 上问过,得到了答案,我的 Haxe 3.2.0 安装有问题,因为它适用于 3.2.0,所以我重新安装并且现在可以使用.

感谢您的帮助和期待!