我正在将JavaScript库转换为Haxe。
似乎Haxe与JS非常相似,但是在工作中我遇到了函数覆盖问题。

例如,在以下函数中,param可以是整数或数组。

JavaScript:

function testFn(param) {
    if (param.constructor.name == 'Array') {
        console.log('param is Array');
        // to do something for Array value
    } else if (typeof param === 'number') {
        console.log('param is Integer');
        // to do something for Integer value
    } else {
        console.log('unknown type');
    }
}

Haxe:
function testFn(param: Dynamic) {
    if (Type.typeof(param) == 'Array') { // need the checking here
        trace('param is Array');
        // to do something for Array value
    } else if (Type.typeof(param) == TInt) {
        trace('param is Integer');
        // to do something for Integer value
    } else {
        console.log('unknown type');
    }
}

当然,Haxe支持Type.typeof(),但ValueType没有任何Array。我怎么解决这个问题?

最佳答案

在Haxe中,通常为此使用 Std.is() 而不是Type.typeof():

if (Std.is(param, Array)) {
    trace('param is Array');
} else if (Std.is(param, Int)) {
    trace('param is Integer');
} else {
    trace('unknown type');
}

也可以使用Type.typeof(),但不太常见-您可以为此目的使用pattern matching。数组是 ValueType.TClass ,它具有c:Class<Dynamic>参数:
switch (Type.typeof(param)) {
    case TClass(Array):
        trace("param is Array");
    case TInt:
        trace("param is Int");
    case _:
        trace("unknown type");
}

关于arrays - 如何在Haxe中检查参数的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47346649/

10-12 16:45