nazonoRubyist RubyでJavaScriptのためにC このページをアンテナに追加 RSSフィード

2006-06-17

RubyJavaScript 02:14 RubyでJavaScript - nazonoRubyist RubyでJavaScriptのためにC を含むブックマーク はてなブックマーク - RubyでJavaScript - nazonoRubyist RubyでJavaScriptのためにC RubyでJavaScript - nazonoRubyist RubyでJavaScriptのためにC のブックマークコメント

RubyJavaScriptを使えないか? と考えた。

構文解析して構文木を作って実行していくのも考えたが色々壮大な計画になりそう。

調べていると、Ruby/JS というモジュールがあった。

http://www.rubyist.net/~tamura/ruby/ruby-js/

NJS JavaScript Interpreter という、javascriptインタプリタRubyの橋渡しをするモジュールのようだ。njsとはNetscapeに搭載されていたインタプリタモジュール版 NGS Javascriptインタプリタの後継版、という位置づけらしいが、News が「May 3, 2001」で終了している…。しかし幸いなことに、debianには ngs-js という名前でパッケージが登録されていた。

早速 apt-get。で、Ruby/JS もダウンロードしてインストールしてみた。インストールはReadmeに書かれているとおりで動く。で、

irb(main):001:0> require "js"
=> true
irb(main):002:0> p JS::evaluate(%!true!)
true
=> nil

おお

irb(main):003:0> p JS::evaluate(%! "hoge" !)
"hoge"
=> nil

ほほう

irb(main):004:0> p JS::evaluate(%! {a:"hoge"} !)
nil
=> nil

おや?

どうやらJavaScriptオブジェクトは旨く返ってこない。ハッシュの形で返ってくることを期待したのだが。

irb(main):007:0> p JS::evaluate(%! x={ a:"hoge"}; !)
JSError: not supported type
     from (irb):7:in `evaluate'
     from (irb):7
     from :0

お、今度はエラーが。Javascriptの{ }構文は値を返さないのかな?インタプリタのミスか?

irb(main):005:0> p JS::evaluate(%! x=function(){ return 1}; x() !)
JSError: StringStream:1: syntax error
     from (irb):5:in `evaluate'
     from (irb):5
     from :0

うーん。匿名関数も作れないようだ。ちなみにこちらはうまくいく。

irb(main):006:0> p JS::evaluate(%! function x(){ return 1}; x() !)
1
=> nil

ハッシュが受け取れないのは、Rubyモジュールがその機能がないからだろうが、匿名関数が作れないのはインタプリタバージョンが古いせいかもしれない。

irb(main):003:0> JS::LIB_VERSION
=> "0.2.5"

古いのか新しいのかもわからんな

とにかく、こりゃこまった

JavaScript

JavaScript

トラックバック - http://rubyist.g.hatena.ne.jp/nazoking/20060617