non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

RingoJS上でJavaScriptを扱うには

Google App EngineCoffeeScript試したくて

おはようございます。一時期息子の就寝時間がやや早まったのですが、昨晩は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に置きました。