将Int转换为Haxe的Int64

时间:2016-08-24 20:16:10

标签: casting haxe openfl int64

当我将原始Int类型设置为Int64时,它可以正常工作。我甚至可以在补充类___Int64中捕获构造函数方法,该方法接受两个 Int值 - 高和低。似乎这个转换是静态的,即使这样的代码也能完美运行:

var short:Int = 1111;
var long:Int64 = 2222;
long = short;
trace(long.high, long.low); // =0,1111

但是,当我从openfl.utils.Object实例的字段设置值时,如:

var id:Int64 = data["id"];

"id"字段的值IntInt64 - 我有错误:

  

TypeError:错误#1034:类型强制失败:无法将1111转换为haxe._Int64 .___ Int64。

当然,我可以检查字段的类型,并从Int64正确地实例化Int。但是,自动化铸造是否有一个简洁的解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用abstract typeDynamic openfl.utils.Objectabstract AnyInt64(Int64) from Int64 to Int64 { @:from static function fromDynamic(d:Dynamic):AnyInt64 { if (Std.is(d, Int)) return Int64.ofInt(cast d); if (Int64.is(d)) { var i:Int64 = cast d; return i; } throw "conversion error"; } } &#39}的数组访问权限的返回值)来抽象支票。< / p>

var data = new openfl.utils.Object();

data["int"] = 500;
var id:AnyInt64 = data["int"];

data["int64"] = Int64.make(1, 0);
var id2:AnyInt64 = data["int64"];

用法:

Int

您需要找到一种处理非Int64Null<Int64>的尝试转化的好方法(除非您只使用这两种类型)。使用AnyInt64作为null的基础类型+检查*/5 * * * * (cd /some/dir && python -m some.python.module) >> /dir/with/the/logfile.log 2>&1 可能会有效。