创建和定义Vector

时间:2010-05-11 23:53:28

标签: flex actionscript-3

我正在寻找创建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>...

由于

4 个答案:

答案 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()函数需要ArrayVector并返回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() );