就在昨天,我决定在过去几年使用Actionscript 3之后开始学习Haxe编程语言.今天我一直在探索抽象类型,我逐渐意识到它们与Java中的抽象类有很大的不同.我开始掌握他们所做的一些事情,但我不确定用什么摘要.是什么构成了在Haxe中正确使用摘要,什么时候我应该在课堂上赞成它们?
例如,下面是使用抽象类型的复数类型的不完整定义.我更喜欢这个还是只是一个普通的课程?
abstract Complex({real:Float, imag:Float}) {
public function new(real:Float, imag:Float) {
this = { real: real, imag: imag };
}
public function real():Float { return this.real; }
public function imag():Float { return this.imag; }
@:op(A + B)
public static function add(lhs:Complex, rhs:Complex):Complex {
return new Complex(lhs.real() + rhs.real(), lhs.imag() + rhs.imag());
}
public function toString():String {
return real() + " + " + imag() + "i";
}
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*lli 22
实际上,摘要与Java中的抽象类完全不同.Haxe中的抽象类型功能强大且有趣.它们的主要特征是它们是仅在编译时存在的类型.在运行时,它们完全被包装类型取代.方法转换为静态函数.在你描述的所有实例的情况下,将通过与这两个领域的匿名对象进行更换real和imag.这是一个很好的用例吗?可能是的,因为复杂类型不是要扩展的,你可能想要定义一些运算符重载(就像你为添加做的那样).
为了使它更轻盈,你可以使用一个Array<Float>包裹类型,其中第一个元素是真实部分,第二个元素是虚构元素.
那么抽象类型有什么好处呢?
abstract RGB(Int) {}使用方法和属性定义一个始终输出非常有效的颜色编码.或者你可以abstract Path(String) {}方便地处理路径连接,相对路径等.white + black并从中获得有意义的东西.fromString(),将十六进制字符串解析为表示颜色的Int.通过隐式演员你可以做到:var color : RGB = "#669900";.thx.color定义了许多用于颜色处理的摘要.什么不太好?或者更好的是,我们应该知道什么是摘要?
Std.is(value, MyAbstract)).