4

我刚写完自己的collecion 类,我真的很想用for each 或simple for 构造让它可迭代,或者只是用collection[key] 表示法访问元素。

我已经写了一个getElementAt(index):MyOwnElement函数,但是使用它并不像使用方括号那样性感,甚至不要让我开始迭代..

有什么办法吗?

4

3 回答 3

9

您应该看一下mx.utils.Proxy- 从中​​继承您的集合类(并将其设置为动态)可能使您可以访问您想要的一些功能(或者至少是足够接近的功能。)

例如,下面是该方法文档的摘录nextValue()

“允许通过索引号枚举代理对象的属性以检索属性值。但是,您不能枚举代理类本身的属性。此函数支持在对象上实现for...infor each..in循环以检索所需的值。”

于 2009-01-15T13:20:24.290 回答
0

您不能覆盖 AS3 中的运算符。
我认为您可以将 'getElementAt' 更改为一个短名称,例如 'at':) 或将 getElementAt 设置为临时变量....

于 2009-01-15T13:03:39.520 回答
0

取决于您收藏的内部结构。如果您的集合存储为数组,那么您可以使用属性来实现方括号效果:


/*** MyCollection class ***/
private var elementHolder : Array;

public function get getElementAt() : Array{
   return elementHolder;
}
/*** Some other class******/
public function main() : void{
   trace("Element at 3: " + myCollection.getElementAt[3] );
}

如果您的集合未存储在数组中,则您可以将其转换为数组(如 java Collection 的 toArray() 方法)。

例如,如果您的集合是一个链表:


/*** MyCollection class ***/

public function get getElementAt() : Array{
   var temp : Array = new Array();
   while( node.next != null{
      temp.push( node );
   }
   return temp;
}
/*** Some other class******/
public function main() : void{
   trace("Element at 3: " + myCollection.getElementAt[3] );
}
于 2009-01-15T19:30:18.037 回答