Haxe的语法跟原生的ActionScript3是有一定的区别的。下面会讲述区别以及代替方法。
Haxe中没有for(var i:int = 0;i<10;i++){}的写法,可使用下述的方式编写:
//其中i变量不需要定义类型
for(i in 0...10)
{
}
如果需要写for(var i:int = 0;i<10;i+=2){}的实现怎么办?别怕,看下面:
var i:Int = 0;
while(i < 10)
{2;
i += }
关于Haxe中的类型命名,第一个字母是必须为大写的。但是它有一个特殊的类名就是import.hx,该类一般用来作为全局导入类使用,这样其他类就不用重新import了。
原来AS3中是使用as语句进行判断的:
if("13123" as String)
{trace("我是字符串类型!");
}
在Haxe中进行类型判断,请使用Std.is方法进行判断:
if(Std.is("13123",String))
{trace("我是字符串类型!");
}
动态类型在AS3中是称之为Object的类型,在Haxe中,是Dynamic类型。
通过一个字符串键值,去获取对象的属性。
在AS3中的实现十分简单:
var obj:Object = {
"abcdef"
key:
}trace(obj["key"]);
这在Haxe中,全部都围绕着Reflect类;那么如何动态获取一个对象的属性呢?请看示例:
var obj:Dynamic = {
"abcdef"
key:
};var keyValue:String = Reflect.getProperty(obj,"key");
trace(keyValue); //输出内容为:abcdef
上述的例子就是一个非常简单获取变量属性的方法。
一般是指通过字符串获取到Class,然后创建出对象,称之为对象反射。
AS3版本:
var objClass:Class = getDefinitionByName(objName) as Class;
var obj:Object = new ObjClass();
Haxe版本,将主要围绕着Type类型:
var objClass:Class<Dynamic> = Type.resolveClass(objName);
var obj:Dynamic = Type.createInstance(objClass);
在使用过程中,经常会遇到类型转换:
AS3版本:
var mc:MovieClip = display as MovieClip;
Haxe版本:
var mc:MovieClip = cast(display,MovieClip);
//方法在CPP中永远返回false,可利用try来代替hasField判断。 Reflect.hasField();