2010-04-23 5 views
6

En el siguiente código:En ActionScript, ¿Hay una manera de comprobar si un argumento de entrada es un vector válido de cualquier tipo?

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); 
... 

Lo que estoy buscando es algo así como _var is Vector.<*>

Pero Vector.<*> no es una expresión válida, incluso vectorial. no se puede colocar en el lado derecho de los operadores.

¿Hay una manera de comprobar si un argumento de entrada es un vector válido de cualquier tipo?

Respuesta

4

Aquí es un método que debería funcionar. Estoy seguro de que debe (seguramente?) Haber una mejor manera por ahí que no utiliza cuerdas, pero este método debe sacarlo del apuro.

/** 
* 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

muy agradable código! –

0

Esto también parece funcionar, aunque estoy muy contento de no poder usar (el candidato es Vector) confiablemente.

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

    return result; 
} 
Cuestiones relacionadas