2012-09-25
■ [jsx] JSXでunderscore.jsを使ってみた
JSXを触ってみたのだけど、二次元配列を初期化するのにforループ回すのが面倒だと感じる体になってしまったので、 underscore.jsを呼んだりできないか試してみた。
「native class」というキーワードを使うと外部モジュールの型を記述できるらしいので、それでなんとか動いた。 まだ_.rangeと_.zipくらいしかないけど。
_.zipの型は
static function zip(...arrays:variant): variant[];
ではなく
static function zip(...arrays:variant[]): variant[];
のような気がするが、こう書くと_.zip([1,2],[3,4])がno function with matching argumentsというエラーになる。number[]とvariant[]は非互換なのかな?
requireについて
これのユニットテストを書こうとしてjsx --testを使ってみたんだけど、ここで困ったことが。 nodeのrequireを呼ぶところまではJSXでLispつくってみた - IT系で覚醒めたいを参考にしてなんとかなった。 が、外部ファイルの読み込みがうまく行かない。
一旦コンパイルすると大丈夫なんだけど、jsx --runやjsx --testで直接実行しようとすると、
eval('var _ = require("./underscore-min.js")');
のところで
Error: Cannot find module './underscore-min.js'
になってしまう。
どうも、jsx --testが/tmpにコンパイル結果を出力するのが原因のようで、絶対パスを指定したらうまくいった。