• ベストアンサー

ActionScriptでクラスの配列

ActionScript3をちょっと触っているのですが、 Stringや独自クラスの配列の変数を宣言する 事は出来ないのでしょうか? var str[]:String; みたいな。 Array()を介さないとダメなのでしょうか? とすると、Array()の中が必ずStringだけとは 限らない状況に陥りそうな気がするのですが・・・。 実現方法をご教示下さい。

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

>Stringや独自クラスの配列の変数を宣言する >事は出来ないのでしょうか? ActionScript3 の配列には型がありませんので、出来ません。 >とすると、Array()の中が必ずStringだけとは >限らない状況に陥りそうな気がするのですが・・・。 はい、陥ります。(^^; 通常は、配列に代入する際に、型チェックをするなり、型変換する事で、特定の型のみが入っている配列を作ります。 しかし、プログラムのミスなどで、他の型が混入する可能性はあります。このミスを、コンパイルの時の型チェックで、エラーにするのは不可能です。 下記の例でも、型のチェックは実行時に行われます。確かに考えてみれば、この点は、不便ですね。 他の型が混入している可能性があるなら、配列からデータを取り出す際にも、型チェックをした方が安全だと思います。 ------------------------------------------------------------- 一応、Arrayクラスを拡張して、特定の型のみを保存する例が Livedoc にあります。 http://livedocs.adobe.com/flex/201_jp/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=10_Lists_of_data_166_6.html しかし、上記の中にも注意書きがありますが、この例はあくまでサンプルであり、実用的な物ではありません。特に下記の部分が、致命的で、これでは何の意味もありません。(^^; ----引用---- 第 3 に、このクラスでは、配列に任意の型の要素を挿入する配列アクセス演算子の使用を防止できません。 ------------ (つまり、配列アクセス演算子 [] を使えば、別の型が代入できるのです。) 結局は、「特定の型しか代入出来ない配列は作れない」という事になると思います。その前提で、プログラムを書く必要があります。

naktak
質問者

お礼

なるほどーー。すごい勉強になりました。ありがとうございます。 ASは基本的に全然触ってなくて初心者レベルなのでかなりタメになります。 > (つまり、配列アクセス演算子 [] を使えば、別の型が代入できるのです。) これはこれでいいような気もしますね。トップレベルはArrayで、 その中身なんて知ったこっちゃない、ってことですよね?これ。 (マニュアルって日本語難しい・・・、読みなれてないと解読不可能ですね^^;) 異なった形式のArrayを入れる事で内部的なプログラムはごっちゃになるでしょうけど、 それはそういう作りにするのが悪いってことで・・・。 ありがとうございました。

関連するQ&A

  • クラスを配列で宣言してデバッグ中にエラーが出る。

    今、"Wireless_unit_str"というクラスをWireless_ID_str02 で宣言してこれを32個分宣言して Wireless_ID_str02[i]->Wireless_ID_str = "test"; 32個分のWireless_ID_str の中に全部”test” と代入してみようとしたのですが、デバッグ最中にその文を実行しようとすると、つぎのようなエラーが出ます。 (エラー内容) ”'System.NullReferenceException' のハンドルされていない例外が HomeBank.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。” 解決する方法はないでしょうか? array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); for(i=0; i < 32;i++) { Wireless_ID_str02[i]->Wireless_ID_str = "test"; } 作成したクラス”Wireless_unit_str”の内容 namespace HomeBank { using namespace System; using namespace System::Collections::Generic; /** * 明細データクラス */ ref class Wireless_unit_str { private: DateTime date; // 日付 String^ name; // 品名 String^ kind; // 分類 int money; // 金額 public: String^ Wireless_ID_str; //array<String^>^ Wireless_ID_str = gcnew array<String^>(32); public: Wireless_unit_str() { Wireless_ID_str = "test"; } }; }

  • セッション変数と配列

    通常の変数であれば、 $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); ですが、セッション変数を配列にするにはどうしたら良いのでしょう? (配列から取り出す方法も含め) $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); $_SESSION["$var"]; や $_SESSION["$var"] = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); としてみましたが、ダメなんですね。 よろしくお願いいたします。 *PHPバージョンは5です

    • ベストアンサー
    • PHP
  • ActionScriptでの配列について

    var table:Array=["A1","A2"]; と配列を宣言しています。 他のレイヤーでこの配列の値を取得し onClipEvent(load){ for(i=0;i<=_root.table.length;i++){ if(_root.table[i] == "A1"){ //処理1     }else{ //処理2 } というようにその配列の値があれば処理1をなければ処理2をするプログラムを書きたいのですが・・。 rootの配列を読み込むやりかたを教えていただきたいです。 どなたかアドバイスいただけると助かります。

  • 空の配列を示す方法

    Flash8を使用して、ActionScript2を書いています。 if文を用いて、「変数my_array(配列)が空の配列でない場合は~」 という条件分岐を書きたいのですが、 空の配列を示す方法がわかりません。 var my_array:Array = new Array(); とした上で、 if (my_array == null) { trace("null"); } else { trace("違う"); } と書いて調べてみたのですが、 nullでもundefinedでも""でも[]でも「違う」と表示されてしまいます。 「空の配列でない場合」という条件を書く方法はあるでしょうか?

    • ベストアンサー
    • Flash
  • クラスを配列に変えたい

    stdClass Object (     [data] => あいうえお ) のように、クラスとして定義されている変数を array (     [data] => あいうえお ) のように、連想配列に変換することはできないでしょうか?

    • ベストアンサー
    • PHP
  • クラス型配列のコピー

    いつもお世話になっています。 クラス型配列のコピーについてなのですが、 普通の配列だと //コピー元配列 String[] str1 = {"str1","str2","str3" }; //コピー先配列 String[] str2 = new String[2]; //指定分だけ、配列内データをコピー System.arraycopy(str1,0,str2,0,2); //表示 for(int s=0;s<2;s++ ) { System.out.println(str2[s]); } といった形式で、コピーできますが、 これがクラス型の場合可能でしょうか? サンプル例として、 public class SampleFormBean { private String sampleName; private int number; public void setSampleName(String sampleName) { this.sampleName = sampleName; } public String getSampleName() { return sampleName; } public void setNumber(int number) { this.number = number; } public int getNumber() { return number; } } というクラスがあった場合で、 実行するソースは、 //SampleFormBeanクラス型配列 SampleFormBean [] sampleS = SampleFormBean Sample[3]; //SampleFormBeanクラスインスタンスの生成 SampleFormBean sample = new SampleFormBean (); //データの設定 sample.setSampleName("test1"); sample.setNumber(0); sampleS[0] = sample; sample.setSampleName("test2"); sample.setNumber(1); sampleS[1] = sample; sample.setSampleName("test3"); sample.setNumber(2); sampleS[2] = sample; という感じになります。 また、for()なら、ディープコピーとして可能ですが、 これ以外に何か手段はあったりするのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • ActionScriptで配列をクリアする方法を教えてください。

    ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • Flash
  • 配列について

    string[] array = new string[200]; というように、arrayという配列を宣言して、そこに CheckBox.Textを入れていきたいんですが、 stringを暗黙的にstring[]に変えれません。というようなエラーがでます。 やっぱり、こんなふうにテキストを配列に入れることは無理なんでしょうか?? 初心者であんまり分からなくて、文章が分かりづらいと思いますが、アドバイスお願いします(><)

  • js 配列?

    javascript var aiueo = ''; var nishi = ''; var higasi = 22; var ai= {}; var kani= {}; var str = []; 4行目と5行目なのですが var ai= {};の = {};と宣言すると配列ができるのですか? 6行目は配列の宣言だと思うのですが(間違っていたらスミマセン) 4行目と6行目の違いは何かあるのでしょうか?

専門家に質問してみよう