トップ «前の日記(2013-11-19) 最新 次の日記(2013-11-27)» 編集

Route 477



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実装した人がいたら、当該箇所をどうしたか見たかったのだけど、一覧には無いようだった。

こういった謎ノウハウがいろいろ溜まるのだけど、極めて需要が低そう。