在 @: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,所以我重新安装并且现在可以使用.
感谢您的帮助和期待!
这个问题的修正很简单:正确更新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,所以我重新安装并且现在可以使用.
感谢您的帮助和期待!