2011-11-16 71 views
1

我目前被Vector類困惑。 我寫了一個漂亮的XML給TypedClass解析器。精美的工作,沒有錯。 UNTIL一位同事注意到我們得到了Vector.<Number> to Vector.<*>的轉換錯誤。Actionscript 3矢量數不擴展矢量*

每個Vector我曾經測試過所有延伸Vector.<*>

Vector.<Sprite>Vector.<String>Vector.<Point>Vector.<Boolean>Vector.<TextField>Vector.<CustomObject>,等等等等等等他們。

<type name="__AS3__.vec::Vector.<String>" base="__AS3__.vec::Vector.<*>" isDynamic="true" isFinal="false" isStatic="false"> 
    <extendsClass type="__AS3__.vec::Vector.<*>"/> 
    <extendsClass type="Object"/> 
    <accessor name="length" access="readwrite" type="uint" declaredBy="__AS3__.vec::Vector.<*>"/> 
    <accessor name="fixed" access="readwrite" type="Boolean" declaredBy="__AS3__.vec::Vector.<*>"/> 
</type> 

但是當我使用的describeType上Vector.<Number>Vector.<uint>Vector.<int>

<type name="__AS3__.vec::Vector.<Number>" base="Object" isDynamic="true" isFinal="true" isStatic="false"> 
    <extendsClass type="Object"/> 
    <constructor> 
    <parameter index="1" type="uint" optional="true"/> 
    <parameter index="2" type="Boolean" optional="true"/> 
    </constructor> 
    <accessor name="length" access="readwrite" type="uint" declaredBy="__AS3__.vec::Vector.<Number>"/> 
    <accessor name="fixed" access="readwrite" type="Boolean" declaredBy="__AS3__.vec::Vector.<Number>"/> 
</type> 

現在我已經佔了這3個向量作爲單獨甚至UINT和INT不會擴展Vector.<Number>因爲我本來期望。 而我的解析函數再次正確地適用於所有類型。但是我的困惑是爲什麼這是事實,爲什麼我找不到關於這個主題的任何文檔。

回答

1

幾個月前,我在Kirupa論壇上問過同樣的問題,但我無法爲我的生活找到線索。

如果我還記得正確的話,Vector.<Number>Vector.<int>Vector.<uint>(但不BooleanString,奇怪的是)類做成儘可能快,所以它們被寫入並作爲單獨的類被處理Flash播放器。

如您所知,其他所有矢量類擴展Vector.<*>和類型檢查不同做了一些(這就是爲什麼載體是使用int,uint和Number速度較快,但數組是稍快於所有其他類)


無論如何,那是爲什麼。至於如何解決這個問題,恐怕你將不得不通過你的載體如無類型你想使用它的功能:

public function addItem(vector:*, item:*) 
    { vector.push(item); } 
+0

有趣。我認爲這是由於原始類型造成的,但它看起來好像[字符串和布爾值也屬於該類別。](http://help.adobe.com/zh_CN/as3/learn/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9c.html# WS5b3ccc516d4fbf351e63e3d118a9b90204-7f88) –

+0

嗯,從技術上說,我的函數需要一個類,然後測試該類是否爲'Vector'類型。當然,Vector的Number和其他任何東西實際上都屬於它,但是當我嘗試將其傳遞給我爲Vector設置的變量的類的新實例分配給它時。 「我曾經大敗過。正如我在問題中所說的那樣,我已經解釋了這一點。我們很少使用Vector。 ',只是很討厭,我不得不單獨解釋它們。這很好,很整潔。 :-( – WORMSS