#types #haxe
#типы #haxe
Вопрос:
Мне нужно проверить, является ли 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;
}
Обратите внимание — это крошечный фрагмент гораздо большего класса. Тип должен быть Dynamic
(например, я не могу использовать Any
).
Заранее спасибо!
Ответ №1:
Здесь у вас есть два варианта:
Первый может быть немного более надежным для вашего варианта использования, поскольку классы являются отдельными ValueType
. Например, для целевого объекта JS Type.typeof("string")
приведет к TClass(String)
, в то время как вы просто получаете true
with Reflect.isObject()
.