AS3 中重载 [] 运算符
我刚刚编写完自己的集合类,我真的很想让它可以使用 foreach 或简单的 for 构造进行迭代,或者只是使用 collection[key] 表示法来访问元素。
我写了一个 getElementAt(index):MyOwnElement 函数,但是使用它并不像使用方括号那么性感,甚至不让我开始迭代..
有什么办法吗?
I just finished writing my own collecion class, and i'd really like to make it iterable with the for each or the simple for construct, or just to access elements with the collection[key] notation.
I've written a getElementAt(index):MyOwnElement
function, but using it, is not as sexy as using the square brachets, don't even let me start on iterating..
Is there any way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您不能覆盖 AS3 中的运算符。
我认为您可以将“getElementAt”更改为“at”之类的短名称:)
或将 getElementAt 分配给临时变量......
You can not override operator in AS3.
I think you may change 'getElementAt' to a short name likes 'at':)
or assgin getElementAt to a temp variable....
取决于您的集合的内部结构。 如果您的集合存储为数组,那么您可以使用属性来实现方括号效果:
如果您的集合不是存储在数组中,也许您可以将其转换为数组(如 java Collection 的 toArray() 方法)。
例如,如果您的集合是一个链接列表:
Depends on the internal structure of your collection. If your collection is stored as an Array then you can use properities to achieve a square bracket effect:
If your collection is not stored in an array maybe you can convert it to an array (like the java Collection's toArray() method).
for example, if your collection is a linked list:
您应该查看
mx.utils.Proxy< /code>
- 从中子类化您的集合类(并将其设置为动态)可能会让您访问您想要的一些功能(或者至少是足够接近的功能)。
例如,这里是摘录
nextValue()
方法的文档:You should take a look at
mx.utils.Proxy
-- subclassing your collection class from that (and setting it as dynamic) might give you access to some of the functionality you want (or at least something that's close enough.)For example, here's an excerpt from the documentation of the
nextValue()
method: