2017-11-17 18 views
2

私はJavaScriptライブラリをHaxeに変換しています。 Haxe言語はJSと非常によく似ていますが、作業中に関数の上書きに問題があります。 たとえば、次の関数では、paramはIntegerまたはArrayになります。Haxe、paramがどうかを確認する方法Array型

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のコード haXeのはType.typeofをサポートしていますが、アレイのための任意のValueTypeがないもちろん

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ので よろしく

+0

(param.length ==未定義の)整数場合。 else array – mplungjan

+0

'param'に' sort'メソッドがあるかどうかチェックできますか? – gurvinder372

+0

Haxeでは、あいまいなチェックを使う必要はありません。適切なタイプチェックがあります。こんにちは、マーク。 –

答えて

5

、あなたは通常、代わりにType.typeof()のこのためStd.is()を使用したい:

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を使用することができます。アレイはc:Class<Dynamic>パラメータを有する、ValueType.TClassである:

switch (Type.typeof(param)) { 
    case TClass(Array): 
     trace("param is Array"); 
    case TInt: 
     trace("param is Int"); 
    case _: 
     trace("unknown type"); 
} 
+0

最高のソリューション!どうもありがとう – rener172846

関連する問題