2013-11-26
■ [rumcoke][altjs] 暗黙のreturnをもつaltjsに潜む罠
最近またRumCokeを触っているのだけど、aobenchのコードで、そのまま移植するとバグになる部分を発見したのでメモ。
rumcokeはcoffee scriptと同様、「関数内の最後の式が自動的にreturnされる」という仕様を採っている。たいていの場合はこれで問題ないのだけど、コンストラクタ関数を書く場合は、戻り値がオブジェクトにならないよう気をつける必要がある。
具体的に説明すると、aobenchには以下のような部分があり、これをrumcokeなりcoffeeなりに素移植すると暗黙のreturnが挟まるため、new Plane(p, n)がfunctionを返すようになってしまって動かなくなる。
function Plane(p, n) {
...
this.intersect = function (ray, isect) {
...
}
}
たぶん、coffee書く人はcoffeeのclassを使うから問題になってないんだと思う。coffeeでaobench実装した人がいたら、当該箇所をどうしたか見たかったのだけど、一覧には無いようだった。
こういった謎ノウハウがいろいろ溜まるのだけど、極めて需要が低そう。