铸造诠释到的Int64在HAXE

问题描述 投票:1回答:1

当我设置了原始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的价值 - 我有一个错误:

类型错误:错误#1034:类型强制失败:不能转换1111 haxe._Int64 .___的Int64。

当然,我可以检查该字段的类型和正确实例从Int64Int。但有一个整洁的解决方案来自动类型转换?

casting haxe openfl int64
1个回答
2
投票

你可以使用一个abstract typeimplicit casts Dynamicopenfl.utils.Object的数组访问GET的返回值),以抽象的检查了。

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";
    }
}

用法:

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可能会奏效。

© www.soinside.com 2019 - 2024. All rights reserved.