RingoJS上でJavaScriptを扱うには
Google App EngineでCoffeeScript試したくて
おはようございます。一時期息子の就寝時間がやや早まったのですが、昨晩は23時台となってしまったkjunichiです。
StackoverflowでRingoJSでCoffeeScriptやろうとしていた人
StackoverflowでRingoJSでCoffeeScriptやろうとしていた人がいて、 この人とは別のアプローチwでやってみたくなり、 RingoJSでのJavaScriptの扱いを調べてちょっと分かった事をメモります。
RhinoのサンプルをJSにしても動かない
Rhinoの「Java から JavaScript オブジェクトを使用する」のサンプルをそのままだと RingoJSではエラーになってしまうんです。
Scriptable scope = cx.initStandardObjects(); ... Object x = scope.get("x", scope);
これを素直にJavaScriptで書くと、
var scope = cx.initStandardObjects(); ... var x = scope.get("x", scope);
scope.getがない!と怒られます。
ringo/engineパッケージの登場
これは、どうもJavaのObject型を自動的にJavaScriptのObject?型に 変換してしまっているようでした。そこで、なんとか JavaのObject型として扱えないものかと調べたら、ありました! RingoJSのringo/engineパッケージにそのものズバリが。
var engine = require("ringo/engine"); var scope = engine.asJavaObject(cx.initStandardObjects()); ... var x = scope.get("x", scope);
これでエラーがなく動くようになりました。
例によってJsdo.itにサンプル作った
これだけだとさっぱりなので、サンプルをJsdo.itに置きました。