LoginSignup
2
1

More than 5 years have passed since last update.

AS3でArrayとVectorの初期化

Posted at

複数の言語使ってると配列の初期化っていつも忘れます。
AS3の配列はArrayとVectorがありますが、初期化はそれぞれ以下のようになります。

var v:Vector.<int> = new <int>[1,2,3];
var v:Vector.<int> = Vector.<int>([1,2,3]);
var v:Vector.<int> = Vector.<int>(10); //長さ10の配列

var a:Array = [1,2,3];
var a:Array = new Array(1,2,3);
var a:Array = new Array(10); //長さ10の配列

Arrayは割と素直なんですけど、Vectorの文法がすんなり入ってこないです。
検索すればすぐわかるのに、こんなん適当に書いてれば当たるだろうと思って、推測で書いては実行してみてってことをしてたら意外に苦戦してしまいました。

以下オマケの実験結果です。

ArrayとVectorのasキャストは無理です。

var a:Array = (new <int>[1,2,3]) as Array;//->null
var v:Vector.<int> = [1, 2, 3] as Vector.<int>;//->null

以下はコンパイル時エラーです。すぐ検出できるのでありがたいです。

//Incorrect number of arguments.  Expected no more than 1.
var a:Array = Array(1,2,3);

//Implicit coercion of a value of type Array to an unrelated type __AS3__.vec:Vector.<int>.
var v:Vector.<int> = [1, 2, 3];

以下は実行時エラーです。

//コンストラクター以外にインスタンス化が試行されました。
var a:Array = new [1, 2, 3];

//Vector.<int>$cinit() の引数の数が一致していません。0 が必要ですが、5 が指定されました。
var v:Vector.<int> = new Vector.<int>(1,2,3);

//クラスの型変換に指定された引数の数が不正です。1 個必要ですが、5 個指定されました。
var v:Vector.<int> = Vector.<int>(1,2,3);

//Number にプロパティ 5 が見つからず、デフォルト値もありません。
var v:Vector.<int> = new Vector.<int>[1, 2, 3];

以下は動作しますが、意図した動作ではないかもしれません。

var a:Array = Array([1, 2, 3]);//a[0]に配列が格納。2次元配列
var v:Vector.<int> = new Vector.<int>([1, 2, 3]);//何も起こらない。長さ0の空配列・・・
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1