我正在寻找创建Vector的方法并在不定义变量Vector的情况下推送一些值。例如:
我有功能:
public function bla(data:Vector.<Object>):void { ... }
此函数需要Vector作为参数。我可以这样传递参数
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>...
由于
答案 0 :(得分: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()
函数需要Array
或Vector
并返回Vector
。因此,例如,您可以使用:
bla(Vector.<Object>(['bla1', 'bla2']));
访问AS3 Reference了解详情。
编辑:我忘了提到函数方法的修正只是添加()
,这意味着我们实际上调用了匿名函数,通过它返回bla
函数。
答案 1 :(得分:1)
只想提一下push接受多个参数,然后每个参数按顺序被压入堆栈:
function getVector():Vector.<String>
{
var newVector:Vector.<String> = new Vector.<String>();
newVector.push("blah1","blah2","blah3","blah4");
return newVector;
}
答案 2 :(得分:0)
我不确定你为什么需要这么做。如果碰巧经常这样做,你总是可以编写一个包装类。包装类可以有一个push方法,它返回对原始对象的引用,这样你就可以使用你想要的第一个方法。
您还可以编写一个辅助函数,该函数创建一个新的向量并将元素添加到向量中,然后返回向量。
特别需要在一条线上想要这个吗?
答案 3 :(得分:0)
你无法做到这一点:
bla(new Vector.<Object>().push("bla1").push("bla2"));
因为“push”方法返回Vector的长度。所以这意味着你试图将 String “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() );