2010-05-11 92 views
0

我正在尋找方法來創建矢量並推送一些值而不定義變量矢量。例如:創建並定義矢量

我有功能:

public function bla(data:Vector.<Object>):void { ... } 

該功能預計向量作爲參數。我可以通過這種方式傳遞參數

var newVector:Vector.<Object> = new Vector.<Object>(); 
newVector.push("bla1"); 
newVector.push("bla2"); 
bla(newVector); 

我可以在Flex的一行中做到這一點嗎?我在尋找類似:

bla(new Vector.<Object>().push("bla1").push("bla2")); 

我也試過這樣:

bla(function():Vector.<Object> { var result:Vector.<Object> = new Vector.<Object>(2, true); result.push("bla1"); result.push("bla2"); return result; }); 

但抱怨:

1067: Implicit coercion of a value of type Function to an unrelated type __AS3__.vec:Vector.<Object>... 

感謝

回答

3

你不能鏈Vector.push()電話,因爲他們返回uint的 - 新的向量長度。
另一方面,強制問題發生是因爲您正在將函數傳遞給bla函數,該函數需要Vector.<Object>

你可以解決這個問題很容易:

bla((function():Vector.<Object> { 
    var result:Vector.<Object> = new Vector.<Object>(2, true); 
    result.push("bla1"); 
    result.push("bla2"); 
    return result; })() 
); 

但是,已經是在AS3的頂級功能,可幫助您創建載體。 Vector()函數需要ArrayVector並返回Vector。因此,例如,您可以使用:

bla(Vector.<Object>(['bla1', 'bla2'])); 

訪問AS3 Reference瞭解更多信息。

編輯:我忘了提,在功能上的方法修復被簡單地增加一個()給它,這意味着我們實際上稱爲匿名函數,並通過它的返回bla功能。

+0

謝謝,我發現我自己了。 Vector()函數爲我做了這個訣竅。 – zinovii 2010-05-12 01:38:18

0

我不是真的肯定你爲什麼需要做一行。如果你經常這樣做,你總是可以編寫一個包裝類。包裝類可以有一個push方法返回對原始對象的引用,所以你可以使用你想要的第一種方法。

你也可以編寫一個輔助函數,它創建一個新的向量,並將這些元素添加到向量中,然後返回該向量。

在一條線上是否有特別的需要?

0

你是不是能夠做到這一點:

bla(new Vector.<Object>().push("bla1").push("bla2")); 

因爲「推」方法返回向量的長度。所以這意味着你正試圖將字符串「bla2」推到int 1.這是行不通的!

而你的下一個例子是將一個函數傳遞給bla方法,而不是調用該函數並傳遞返回的Vector。

另外你說的Vector類型是「Object」,但你傳遞的是字符串。你應該這樣做:

Vector.<String> 

你可以做這樣的事情:

function getVector():Vector.<String> 
{ 
    var newVector:Vector.<String> = new Vector.<String>(); 
    newVector.push("bla1"); 
    newVector.push("bla2"); 
    return newVector; 
} 

bla(getVector()); 
1

只想提推送需要多個參數,而且每一個被壓入堆棧順序:

function getVector():Vector.<String> 
{ 
    var newVector:Vector.<String> = new Vector.<String>(); 
    newVector.push("blah1","blah2","blah3","blah4"); 
    return newVector; 
}