Qiita から引っ越し。
次のバージョンのPictRubyでチャット風インターフェースを作れるようにしたのでirbを実装した。
コードは以下のような感じに。エラーハンドリングはさすがにObjective-C側に書かないとダメかなと思ったいたのだけど、例外キャッチするだけでうまくいった。Rubyの表現力はやはり高い。
# # 10_irb # # ## Description # Interactive Ruby Shell is a REPL. def chat(input) begin eval(input) rescue Exception => e e.message end end
とりあえずうまくいったのだけど、なぜかローカル変数を定義できないので他のirbの実装を眺めてみた。
web-irb
http://joshnuss.github.io/mruby-web-irb/
>> a = [1, 2, 3] =>[1, 2, 3] =>NoMethodError: undefined method 'a' for main
同じ現象が起きている!
>> @a = [1, 2, 3] >> @a =>[1, 2, 3]
メンバ変数として定義するとちゃんと保持される。
mirbiosでLINE風味にIRBできるようにする
次のバージョンのPictRubyでチャット風インターフェースを作れるようにしたのでirbを実装した。
コードは以下のような感じに。エラーハンドリングはさすがにObjective-C側に書かないとダメかなと思ったいたのだけど、例外キャッチするだけでうまくいった。Rubyの表現力はやはり高い。
# # 10_irb # # ## Description # Interactive Ruby Shell is a REPL. def chat(input) begin eval(input) rescue Exception => e e.message end end
とりあえずうまくいったのだけど、なぜかローカル変数を定義できないので他のirbの実装を眺めてみた。
web-irb
http://joshnuss.github.io/mruby-web-irb/
>> a = [1, 2, 3] =>[1, 2, 3] =>NoMethodError: undefined method 'a' for main
同じ現象が起きている!
>> @a = [1, 2, 3] >> @a =>[1, 2, 3]
メンバ変数として定義するとちゃんと保持される。
mirb
mruby標準添付のやつ
$ git clone https://github.com/mruby/mruby.git $ rake $ ./bin/mirb mirb - Embeddable Interactive Ruby Shell > a = 1 a = 1 => 1 > a a => 1
mirbはちゃんとローカル変数が使えるようだ。何か実際に違いがあるのかも。(そのうちソース読もう)
まとめ
ともあれweb-irbは同じだったのでちょっと安心した(なにが)。メンバ変数を使うという逃げ道も見つかったのでとりあえず実装優先で進める。
mruby標準添付のやつ
$ git clone https://github.com/mruby/mruby.git $ rake $ ./bin/mirb mirb - Embeddable Interactive Ruby Shell > a = 1 a = 1 => 1 > a a => 1
mirbはちゃんとローカル変数が使えるようだ。何か実際に違いがあるのかも。(そのうちソース読もう)
まとめ
ともあれweb-irbは同じだったのでちょっと安心した(なにが)。メンバ変数を使うという逃げ道も見つかったのでとりあえず実装優先で進める。