ロールアウト定義の挙動が謎だったので、勉強も兼ねて簡単に調べてみました。
- ロールアウトは定義されたタイミングで単一のオブジェクトとなる。
クラス・インスタンスという概念はなく、プロセス内で1つの実体しか持てない。 - 1つのオブジェクトにつき1つのウィンドウしか作れない。
複数のSubRolloutやFloaterで実体を作成しようとしても、別の場所で実体化されているロールアウトは作成されない。 - 作成されたロールアウトは、同名の変数に格納される。
例えばTestRolloutならTestRollout変数に格納される。
既に同名の変数が存在する場合、その変数のスコープが適応される。
普通の変数なので、代入などで上書きする事ができ、またロールアウトを別の変数に入れ替える事もできる。 - 複数の実体を作りたい時には、再度定義コードを実行しなければならない。
定義を実行すると、新規にロールアウトオブジェクトが作成され、同名の変数に上書きされる。
前に作成したオブジェクトへの参照が失われる為、後から参照したいときは、予め変数から取り出しておく必要がある。 - copy関数等でオブジェクトを複製する事は出来るが、それらは同一のロールアウトを参照しておりやはり多重起動できない。
- ロールアウトはcreateDialog等で実体化する時に、再度初期化される。
実体化前に変数や関数にアクセスする事は出来るが、実体化時に再度初期化される。
全体的にかなりよく分からない仕様になっていますが、重要なのはオブジェクトと変数を切り離して考える事、クラス・インスタンスの概念が存在しない事を把握する事かと思います。
Max自体がかなり古いソフト(20年以上前)という事もあり、いわゆるオブジェクト指向的な考え方には則っていないのだと思います。