スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

カテゴリ : スポンサー広告

tjsで名前空間を使うメモ

Scripts.execStorageのコンテキスト指定によって名前空間らしきものが使えます。
コンテキスト指定ができるのは開発版のみです
参考:吉里吉里安定版と開発版の違いメモ

以下サンプル。startup.tjs, a.tjs, b.tjsの3つにわかれています。
// startup.tjs
Plugins.link("ScriptsEx.dll"); // Scripts.getObjectContextを使う
class Namespace {} // ネームスペースとして使うクラス

Scripts.execStorage("a.tjs",,Namespace);
Scripts.execStorage("b.tjs",,Namespace);

Debug.message("new Namespace.A()");
var a = new Namespace.A();

Debug.message("new Namespace.B()");
var b = new Namespace.B();

Debug.message('a instanceof "Namespace.A" == ' + (a instanceof "Namespace.A"));
Debug.message('a instanceof "A" == ' + (a instanceof "A"));
Debug.message('Scripts.getClassNames(a).join(", ") == ' + Scripts.getClassNames(a).join(", "));
Debug.message('Scripts.getClassNames(b).join(", ") == ' + Scripts.getClassNames(b).join(", "));

// a.tjs
if (Scripts.getObjectContext(this) != Namespace) { throw new Exception(); }
class A {
  function A() { Debug.message("A()"); }
}

// b.tjs
if (Scripts.getObjectContext(this) != Namespace) { throw new Exception(); }
class B extends Namespace.A {
  function B() { super.A(); Debug.message("B()"); }
}

コンテキストにNamespaceを指定しているので、AとBはNamespaceの中で定義されます。

a.tjsとb.tjsではScripts.getObjectContextを使ってNamespaceコンテキストで呼ばれているかチェックしています。
ミスがないようにチェックしているだけなので無くても動きます。

あとはNamespace.AやNamespace.Bで使えます。
ただしinstanceofでは"Namespace.A"ではなく"A"となります。
少し面倒なのでinstanceofの代わりに適当な関数を作ってもいいかもしれません。

このスクリプトを実行すると、Debug.messageの出力は以下のようになります。
new Namespace.A()
A()
new Namespace.B()
A()
B()
a instanceof "Namespace.A" == 0
a instanceof "A" == 1
Scripts.getClassNames(a).join(", ") == A
Scripts.getClassNames(b).join(", ") == B, A

実際はこんなことをせずにNamespace_Aのようなクラス名にしてしまうのがいいと思います。
スポンサーサイト

タグ : 吉里吉里 TJS

カテゴリ : TJS

コメントの投稿

非公開コメント

最新記事
カテゴリ

openclose

記事一覧
Twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。