- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
就在昨天,在使用了 Actionscript 3 几年后,我决定开始学习 Haxe 编程语言。今天我一直在探索抽象类型,我发现它们看起来与Java中的抽象类有很大不同。我开始了解他们所做的一些事情,但我不确定摘要的用途。 Haxe 中抽象的正确使用是什么?我什么时候应该优先使用抽象而不是类?
例如,下面是使用抽象类型的复数类型的不完整定义。我应该选择这个还是只是一个普通的类(class)?
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";
}
}
最佳答案
事实上,抽象与 Java 中的抽象类完全不同。 Haxe 中的抽象类型功能强大且有趣。它们的主要特征是它们是仅在编译时存在的类型。在运行时它们完全被包装类型替换。方法被转换为静态函数。在您描述的情况下,所有实例都将被具有两个字段 real
的匿名对象替换。和imag
。这是一个很好的用例吗?可能是的,因为 Complex 类型并不意味着要扩展,并且您可能想要定义一些运算符重载(就像您对加法所做的那样)。
为了使其更加轻量,您可以使用 Array<Float>
作为包装类型,其中第一个元素是实部,第二个元素是虚部。
那么抽象类型有什么好处呢?
abstract RGB(Int) {}
借助方法和属性,始终输出非常高效的颜色编码。或者你可以有一个 abstract Path(String) {}
方便地处理路径串联、相对路径等。white + black
的操作并从中得到一些有意义的东西。fromString()
将十六进制字符串解析为表示颜色的 Int。通过隐式转换,您可以执行以下操作: var color : RGB = "#669900";
。 thx.color
定义了很多颜色处理的抽象。什么不太好?或者更好的是,关于摘要我们应该了解什么?
Std.is(value, MyAbstract)
)。关于haxe - 摘要的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642935/
我正在尝试使用一些附加功能编写自己的 bool “抽象”。 @forward abstract MyBool(Bool) { public inline function new(b:Bool)
haxe 中是否有某种退出语句?喜欢 import sys sys.exit(0) 在 Python 或 System.exit(0); 在 java ? P.S.:只需要这个用于 sys 目标...
是否可以根据运行时可用的信息将变量转换为另一种类型? 如果我有: interface Foo { } class Bar implements Foo { public function ne
我正在关注使用 Haxe 语言的 HaxeFlixel 教程。现在我没有任何 Haxe 经验,但我决定勇敢学习教程,因为我确实有 Java 和 Haxe 的经验,因为这种语言似乎与 Java 非常相似
我正在尝试使用构建 hxml 文件来编译 Haxe 类,而不定义入口点。 我的文件夹结构如下所示: root | ___src |___Test.hx | ___build.hxml T
对于haxe,我们通常需要使用现有的非haxe代码,因此我们可能希望我们的haxe代码吸收系统的一部分或添加到系统中,而不是编写外部代码,而我们不能假设一个好的haxe设置的系统。 例如,以 js 目
我发现在构建 Haxe 项目时,仅编译从 Main 引用的代码或由在 Main 中间接/直接引用的类引用的代码。如何强制 Haxe 将所有源 .HX 文件编译成目标语言?我试过使用 DCE 标志(no
我想像这样在 Map 中使用函数作为键: var timers : MapVoid, snow.api.Timer>; 但是 Haxe 不会编译: Abstract Map has no @:to f
有人知道一种自动获取 Haxe 项目中未使用类列表的方法吗? 我没有找到有关此的文档,但该信息应该在某处可用。就像消除死代码后的差异。 最佳答案 可以通过 -D dce-debug 编译得到 DCE
Haxe 有没有办法获得 Java 的抽象方法和抽象类的等价物? 我想要的是 // An abstract class. (Written in a Java/Haxe hybrid.) abstr
Haxe 有 trace() ,可用于所有目标以打印内容。 trace("aa"); // Main.hx:89: aa 如何只打印内容,而不打印文件名和行号? 最佳答案 对于 sys 目标(例如 n
我计划在 Haxe 的一个子集中编写 Haxe 库,这些库将编译为每种 Haxe 目标语言。有什么方法可以验证 Haxe 程序是否可以编译为所有目标语言,是否可以在不手动测试每个目标平台上的编译代码的
在Haxe中,有没有脚本或者命令可以自动运行一个多目标语言的Haxe程序?我想编写一个执行以下操作的脚本: 1) 将 Haxe 源代码编译为 JavaScript、C++、PHP 和 Java。 2)
在其他编程语言中,我可以使用 int array[23][23] 来声明每个维度有 23 个元素的二维数组。我如何在 Haxe 中实现同样的目标? 目前我需要这样做: var arr:Array> =
我的 Haxe 构建有多个目标,我必须手动对每个目标进行 c/p 更改。 .hxml 文件可以处理变量吗? 最佳答案 不,但您可以使用 --each 和 --next 减少重复: -main Exam
我想使用 Haxe 导入图像,我的图像很大,但它是 8 位,重 89kb。当我导入它时出现问题,因为内存大小增加了35mb。我想它是为 32 位图像保留内存。知道如何导入 8 位图像而不消耗这么多内存
是否有一个库/类/数据类型来处理 Haxe 中的大数字并且也是平台无关的? 我想做的是一款增量游戏(比如 Clicker Heroes),但我受制于 32 位整数限制。 我在谷歌搜索时发现了一两个类,
我需要防止类 A 在任何地方被实例化,而只能从另一个类 B 实例化,然后类 B 可以返回类 A 的创建实例,该实例可以在任何其他类中使用。 我知道 B 在这个例子中可能是一个工厂,我查看了 Haxe
开发人员可以在生产开发的前端(Web 和桌面)和后端使用 haxe 是真的吗 - 需要源代码 最佳答案 是的,这是真的。 Haxe 可以转换为多种语言,例如 PHP、Javascript、C++、Ja
是否有预定义的 HashSet Haxe 中的类,类似于 s = set() 在 Python 或 import java.util.HashSet; 在 java ? 我知道,我可以简单地使用 ha
我是一名优秀的程序员,十分优秀!