« 久しぶりにSparkにコミットしました | メイン | Catmull-Rom 補間 »

2008年5月16日

[as3] FlashPlayer10のVectorクラスって

FlashPlayer10が世間を賑わせてますが、僕はまだインストールしてないです。
3Dに対応したけど、世の中のFlashコンテンツが3Dだらけになったら嫌だなあ。とかぼやきつつ
もうしばらく静観してようかなと思ってます。
いろんな人が新機能についてノウハウを記事にされるのを読んでからにしようかと。
Flexも持ってないし。
まったく人任せな。

ところで、Vectorクラスなんですけども、
これって中身を型指定できるってことなんですが
var a:Array = new Vector.<String>();
みたいなことって出来るんでしょうか。

Vectorクラス自体の実装を一見しても、Array を継承してるようでもないので、
もしかしてArrayとはまったく別物なのかな? と。

個人的な要望としては
var a:String[] = ["a","b","c"];
みたいな方が都合良さげな気がするんですが。

もしかして
var v:Vector.<String> = ["a","b","c"];
とかもできないんだろうか。

さすがに
function test( arg:Vector.<String> ): Vector.<String>
{
   return arg;
}
ってことは出来るんだろうけど。

でも、やっぱり Vector が Array として認識できないと何か嫌。
認識できなくていいなら、Proxy使ってこんな実装でいいんじゃないかと。
これなら今のままでも使えるし。

まあ、Arrayより高速に処理できるってことはいいんだろうけど。


ついでに、上記の「こんな実装」を使った場合は以下のような感じ。
ArrayOf
import flash.geom.Point;

var points:ArrayOf = new ArrayOf(Point);
points[0] = new Point(1,1);
points[1] = new Point(2,2);
points.push( new Point(3,3), new Point(4,4) );

trace(points); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4)

var a:Array = points.toArray();
trace(a); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4)

var points2:ArrayOf = new ArrayOf(Point);
points2.push(new Point(5,5), new Point(6,6));

var points3:ArrayOf = points.concat(points2);


trace( points3 ); //(x=1, y=1),(x=2, y=2),(x=3, y=3),(x=4, y=4),(x=5, y=5),(x=6, y=6)
trace(points3[4]);          // (x=5, y=5)
trace(points3.shift());     // (x=1, y=1)
trace(points3.pop());       // (x=6, y=6)
trace(points3.splice(0,2)); // (x=2, y=2),(x=3, y=3)

test(points); // ok

points[0] = 1; // ArgumentError: Point と関連しない型の値は格納できません。

function test(arg:ArrayOf):void
{
    if( arg.type != Point ) throw new ArgumentError("エラー");
    trace("ok");
}

トラックバック(0)

このブログ記事を参照しているブログ一覧: FlashPlayer10のVectorクラスって

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/500

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。