2010-05-11 100 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; 
}