有没有办法在 Haxe 中将 类 和方法声明为抽象的?
Is there a way to declare classes and methods as abstract in Haxe?
在 Haxe 中有没有一种方法可以得到 Java 的抽象方法和抽象 classes 的等价物?
我要的是
// An abstract class. (Written in a Java/Haxe hybrid.)
abstract class Process<A> {
public function then<B>( f : A -> Process<B> ) : Process<B> {
var a : A = go() ;
return f(a) ;
}
abstract public function go( ) : A ;
}
// A concrete class.
class UnitP<A> extends Process<A> {
var _a : A ;
public function new( a : A ) {
_a = a ; }
public override function go() : A { return _a ; }
}
我能得到的最接近的是将 Process
定义为一个接口,并使用概念上抽象的 class ProcessA
来实现它,它定义了这两种方法; ProcessA
中的 go
的实现简单地崩溃了。然后我可以将我概念上具体的 classes 扩展到 ProcessA。
正如 MSGhero 所提到的,Java 风格的摘要不受 Haxe 的原生支持。虽然有几个人要求,所以 Andy Li 写了一个宏来为 Haxe 用户提供类似的功能:
我如何在 Haxe 中做同样的事情
- 将构造函数设为私有以确保不会创建抽象 class 的实例。
- 创建一个包含所有必须实现的方法的接口
创建一个class继承抽象并实现接口。
// An interface
interface IProcess<A, B> {
public function then( f : A -> AProcess<B> ) : AProcess<B>;
public function go() : A;
}
// An abstract class.
class AProcess<A, B> {
private function new() {}
public function then<B>( f : A -> AProcess<B> ) : AProcess<B> {
var a : A = go() ;
return f(a) ;
}
private function go() : A {};
}
// A concrete class.
class UnitP extends AProcess<A, B> implements IProcess {
var _a : A ;
public function new( a : A ) {
super();
_a = a ;
}
public function go() : A { return _a ; }
}
在 Haxe 中有没有一种方法可以得到 Java 的抽象方法和抽象 classes 的等价物?
我要的是
// An abstract class. (Written in a Java/Haxe hybrid.)
abstract class Process<A> {
public function then<B>( f : A -> Process<B> ) : Process<B> {
var a : A = go() ;
return f(a) ;
}
abstract public function go( ) : A ;
}
// A concrete class.
class UnitP<A> extends Process<A> {
var _a : A ;
public function new( a : A ) {
_a = a ; }
public override function go() : A { return _a ; }
}
我能得到的最接近的是将 Process
定义为一个接口,并使用概念上抽象的 class ProcessA
来实现它,它定义了这两种方法; ProcessA
中的 go
的实现简单地崩溃了。然后我可以将我概念上具体的 classes 扩展到 ProcessA。
正如 MSGhero 所提到的,Java 风格的摘要不受 Haxe 的原生支持。虽然有几个人要求,所以 Andy Li 写了一个宏来为 Haxe 用户提供类似的功能:
我如何在 Haxe 中做同样的事情
- 将构造函数设为私有以确保不会创建抽象 class 的实例。
- 创建一个包含所有必须实现的方法的接口
创建一个class继承抽象并实现接口。
// An interface interface IProcess<A, B> { public function then( f : A -> AProcess<B> ) : AProcess<B>; public function go() : A; } // An abstract class. class AProcess<A, B> { private function new() {} public function then<B>( f : A -> AProcess<B> ) : AProcess<B> { var a : A = go() ; return f(a) ; } private function go() : A {}; } // A concrete class. class UnitP extends AProcess<A, B> implements IProcess { var _a : A ; public function new( a : A ) { super(); _a = a ; } public function go() : A { return _a ; } }