【问题标题】:Haxe: check if a dynamic type is an ObjectHaxe:检查动态类型是否为对象
【发布时间】:2020-08-16 08:39:03
【问题描述】:

我需要检查var a : Dynamic = {} 是否是一个对象。所以我期待:

var a : Dynamic;
a = 17.2; check( a ); // false
a = "test"; check( a ); // false
a = [1,2,3]; check( a ); // false
a = 99; check( a ); // false
a = {b:1, c:2}; check( a ); // true

这是我所拥有的(与上面略有不同,因为它检查多种类型并返回一个枚举)。一切正常,除了对象线:

function check( v : Dynamic ) : TokenType {
    if ( Std.is(v, std.Array) ) return TTArray;
    else if ( Std.is(v, std.String) ) return TTString;
    else if ( Std.is(v, Object) ) return TTObject; // What do I need here?
    else if ( Math.isNaN( v ) ) return TTUnknown;
    else if ( Std.is(v, StdTypes.Float) ) return TTNumber;
    else if ( Std.is(v, StdTypes.Int) ) return TTNumber;
    return TTUnknown;
}

注意 - 这是一个更大类的小 sn-p。类型必须是Dynamic(例如,我不能使用Any)。

提前致谢!

【问题讨论】:

    标签: types haxe


    【解决方案1】:

    你有两个选择:

    对于您的用例来说,前者可能更可靠一些,因为类是一个单独的ValueType。例如,在 JS 目标上,Type.typeof("string") 将导致TClass(String),而您只需使用Reflect.isObject() 获得true

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2017-10-28
      • 2017-05-12
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多