Method: Lua::State#__set_metatable
- Defined in:
- ext/rlua.c
#__set_metatable=(object, metatable) ⇒ Object
Sets metatable for any valid Lua object. metatable can be Lua::Table or
Hash. If you want to set metatables for non-table objects (e.g. numbers)
just pass their Ruby equivalent.
# Implement concatenation operator for Lua strnigs.
state = Lua::State.new
state.("", { '__add' => lambda{ |a, b| a + b } })
p state.__eval('return "hello," + " world"') # => "hello, world"
761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 |
# File 'ext/rlua.c', line 761
static VALUE rbLua_set_metatable(VALUE self, VALUE object, VALUE metatable)
{
lua_State* state;
Data_Get_Struct(rb_iv_get(self, "@state"), lua_State, state);
if(rb_obj_class(metatable) != cLuaTable && TYPE(metatable) != T_HASH)
rb_raise(rb_eTypeError, "wrong argument type %s (expected Lua::Table or Hash)", rb_obj_classname(metatable));
rlua_push_var(state, object); // stack: |objt|...
rlua_push_var(state, metatable); // |meta|objt|...
lua_setmetatable(state, -2); // |objt|...
lua_pop(state, 1); // ...
return metatable;
}
|