ひさびさにJScript(Windows Script Host)のお話。
JScriptにはCのPerlのuseや、Rubyのrequireなどに相当する、外部ファイルをスクリプトとして読み込む命令がありません(wsfにまとめるという方法もありますが、まとめてしまうと、スクリプトで補足できなかった例外は全く表示されなくなる というどでかい問題があるようなので、論外でした)。
いちおう代替案として、FileSystemObjectを使ってJSファイルを読み込んでeval とかいう方法もありますが、そうすると内部で例外が起こっても、行数が正確に表示されなくなってしまいます。
せめてログを表示させたい と思って、以下のコードを、インクルードするファイルのクラスに追加
SomeClass.prototype = { ... logstream: undefined, _log:function(line) { if(this.logstream) this.logstream.writeline(line); } }
※ logstreamはTextStreamクラスを想定しています
こうすると、logstreamに何かTextStreamを与えればログがTextStreamに出力されます。ちょうどよく、WScript.StdOutなどはTextStreamなので、
var a = new SomeClass(); a.logstream = WScript.StdOut;
としてやると、ログが標準出力に表示されます。ファイルに出力するように書き換えるのも容易なので、結構便利。
JScriptはブラウザベースで使われる言語でもあるし、結構初心者にも取っつきやすい言語だと思うんですが・・・。 今後WSHとしての機能拡張はないということなのが残念。
せめて標準で外部ファイルのインクルード機能くらい付けてほしかったですが・・・。