独自のコレクション クラスの作成を終えたばかりで、for each または単純な for 構成で反復可能にしたい、または collection[key] 表記を使用して要素にアクセスしたいだけです。
私はgetElementAt(index):MyOwnElement
関数を書きましたが、それを使用することは、角括弧を使用するほど魅力的ではありません.反復を開始することさえできません..
何か方法はありますか?
独自のコレクション クラスの作成を終えたばかりで、for each または単純な for 構成で反復可能にしたい、または collection[key] 表記を使用して要素にアクセスしたいだけです。
私はgetElementAt(index):MyOwnElement
関数を書きましたが、それを使用することは、角括弧を使用するほど魅力的ではありません.反復を開始することさえできません..
何か方法はありますか?
あなたは見てみる必要がありますmx.utils.Proxy
- それからコレクションクラスをサブクラス化する(そしてそれを動的に設定する)と、必要な機能の一部(または少なくとも十分に近いもの)にアクセスできる場合があります。
たとえば、nextValue()
メソッドのドキュメントからの抜粋を次に示します。
「プロキシされたオブジェクトのプロパティをインデックス番号で列挙して、プロパティ値を取得できるようにします。ただし、Proxy クラス自体のプロパティを列挙することはできません。この関数は、目的の値を取得するためのオブジェクトの実装
for...in
とfor each..in
ループをサポートしています。」
コレクションの内部構造によって異なります。コレクションが配列として保存されている場合は、プロパティを使用して角括弧効果を実現できます。
/*** 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コレクションの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] );
}
AS3 では演算子をオーバーライドできません。
「getElementAt」を「at」のような短い名前に変更するか、getElementAt を一時変数に割り当てることができると思います。