http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/rua.c?root=svn&view=markup
とりあえずこれで完成かな。
あとは、extconf.rb書いて、RubyForgeに登録してwin32用のバイナリ作って。。。
変換するコードはこんな感じ。
static void rua_newtable_from_obj(lua_State *L, VALUE obj, VALUE error_handler) { VALUE methods, name, method; int i, tblidx; lua_newtable(L); tblidx = lua_gettop(L); methods = rb_check_convert_type(obj, T_ARRAY, "Array", "methods"); for (i = 0; i < RARRAY(methods)->len; i++) { name = rb_ary_entry(methods, i); method = rb_funcall(obj, rb_intern("method"), 1, name); rua_pushrbval(L, name, error_handler); rua_pushrbval(L, method, error_handler); lua_settable(L, tblidx); } }
rb_obj_methodとrb_obj_methodsがなぜか見つからなかった。。。
↓な感じで、テーブルをオブジェクトに見立てて使う。selfの行方が気になる。メモリ上のどっか?
require 'rua' rua = Rua.new rua.openlibs(:all) rua[:time] = Time.new rua.eval(<<EOS) print(time.to_s()) print(time.strftime('%Y-%m-%d %H:%M')) EOS
Sat Nov 10 21:24:17 +0900 2007
2007-11-10 21:24
追記
こーゆーこともできた。ちょっと面白い。
require 'rua' rua = Rua.new rua.openlibs(:all) rua[:Time] = Time rua.eval(<<EOS) time = Time.new() print(time.to_s()) EOS