2010-04-23 11 views
6

W poniższym kodzie:W języku ActionScript: Czy istnieje sposób sprawdzenia, czy argument wejściowy jest prawidłowym wektorem dowolnego typu?

var a:Vector.<int> ... 
var b:Vector.<String> ... 
var c:Vector.<uint> ... 
var c:Vector.<MyOwnClass> ... 

function verifyArrayLike(arr:*):Boolean 
{ 
    return (arr is Array || arr is Vector) 
} 

verifyArrayLike(a); 
verifyArrayLike(b); 
... 

Co szukam jest coś takiego jak _var is Vector.<*>

Ale Vector.<*> nie jest poprawnym wyrażeniem nawet wektorowych. nie można umieścić po prawej stronie operatorów.

Czy istnieje sposób sprawdzenia, czy argument wejściowy jest prawidłowym wektorem dowolnego typu?

Odpowiedz

4

Oto metoda, która powinna działać. Jestem pewien, że musi (z pewnością?) Być lepszym sposobem, który nie używa ciągów, ale ta metoda powinna cię odpędzić.

/** 
* Finds out if an object is a generic Vector. 
* It works because the value returned for getQualifiedClassName(a vector) 
* is "__AS3__.vec::Vector.<the vector's type>". 
* @param object Object Any object. 
* @return Boolean True if the object is a generic Vector, false otherwise. 
*/ 
function isVector(object:Object):Boolean 
{ 
    var class_name:String = getQualifiedClassName(object); 
    return class_name.indexOf("__AS3__.vec::Vector.") === 0; 
} 
+0

bardzo ładny kod! –

0

To również wydaje się działać, chociaż jestem niezadowolony z tego, że nie mogę go używać (kandydat jest Vector) niezawodnie.

private function isVector(candidate : *) : Boolean 
{ 
    var result : Boolean; 
    try 
    { 
     Vector.<*>(candidate).length; 
     result = true; 
    } 
    catch (error : Error) 
    { 
     result = false; 
    } 

    return result; 
}