2010-04-23 20 views
6

Trong đoạn mã sau:Trong ActionScript, có cách nào để kiểm tra xem đối số đầu vào có phải là một Vector hợp lệ thuộc loại nào không?

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

Những gì tôi đang tìm kiếm là một cái gì đó giống như _var is Vector.<*>

Nhưng Vector.<*> được không phải là một biểu thức hợp lệ, thậm chí Vector. không thể được đặt ở phía bên phải của nhà khai thác.

Có cách nào để kiểm tra xem đối số đầu vào có phải là một Vector hợp lệ thuộc loại nào không?

Trả lời

4

Đây là phương pháp hoạt động. Tôi tự tin rằng phải (chắc chắn?) Là một cách tốt hơn ra khỏi đó mà không sử dụng dây, nhưng phương pháp này sẽ thủy triều bạn hơn.

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

mã rất đẹp! –

0

này cũng dường như làm việc, mặc dù tôi rất không hài lòng về việc không thể sử dụng (ứng cử viên là Vector) đáng tin cậy.

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

    return result; 
} 
Các vấn đề liên quan