当我将原始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"
字段的值Int
或Int64
- 我有错误:
TypeError:错误#1034:类型强制失败:无法将1111转换为haxe._Int64 .___ Int64。
当然,我可以检查字段的类型,并从Int64
正确地实例化Int
。但是,自动化铸造是否有一个简洁的解决方案?
答案 0 :(得分:2)
您可以使用abstract type与Dynamic
openfl.utils.Object
(abstract 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
您需要找到一种处理非Int64
或Null<Int64>
的尝试转化的好方法(除非您只使用这两种类型)。使用AnyInt64
作为null
的基础类型+检查*/5 * * * * (cd /some/dir && python -m some.python.module) >> /dir/with/the/logfile.log 2>&1
可能会有效。