diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/oop_example.c | 26 | ||||
-rw-r--r-- | examples/oop_example.lua | 15 |
2 files changed, 8 insertions, 33 deletions
diff --git a/examples/oop_example.c b/examples/oop_example.c index 859bd03..59dfc5a 100644 --- a/examples/oop_example.c +++ b/examples/oop_example.c @@ -46,22 +46,9 @@ int point_new(lua_State *L) { return 1; } -int point___init(lua_State *L) { - /* The difference between this function and `_new` function is that this - * one is called by subclass of Point implemented in Lua, although it - * basically does the same thing as `_new`. Also, it can read the empty - * object (table) from the stack. (In this example, the table is ignored.) */ - Point *self = (Point *)malloc(sizeof(Point)); - point_new_(self, luaL_checknumber(L, 2), luaL_checknumber(L, 3)); - luaT_pushudata(L, self, point_tname); - fprintf(stderr, "[example] A subclass has invoked `__init`\n"); - return 1; -} - static const luaL_Reg point_methods[] = { {"set_x", point_set_x}, {"set_y", point_set_y}, - {"__init", point___init}, {"norm", point_norm}, {NULL, NULL} }; @@ -84,21 +71,8 @@ int better_point_new(lua_State *L) { return 1; } -int better_point___init(lua_State *L) { - /* The difference between this function and `_new` function is that this - * one is called by subclass of Point implemented in Lua, although it - * basically does the same thing as `_new`. Also, it can read the empty - * object (table) from the stack. (In this example, the table is ignored.) */ - Point *self = (Point *)malloc(sizeof(Point)); - point_new_(self, luaL_checknumber(L, 2), luaL_checknumber(L, 3)); - luaT_pushudata(L, self, better_point_tname); - fprintf(stderr, "[example] A subclass has invoked `__init`\n"); - return 1; -} - static const luaL_Reg better_point_methods[] = { {"norm", better_point_norm}, - {"__init", better_point___init}, {NULL, NULL} }; diff --git a/examples/oop_example.lua b/examples/oop_example.lua index 712387b..b753288 100644 --- a/examples/oop_example.lua +++ b/examples/oop_example.lua @@ -5,11 +5,12 @@ p:set_x(1.0) p:set_y(2.0) print(p:norm()) -- get 2-norm of the Point -p = nerv.BetterPoint(1, 2) -print(p) -print(p:norm()) --get 1-norm of the Point +bp = nerv.BetterPoint(1, 2) +-- use methods from base class +bp:set_x(1.0) +bp:set_y(2.0) +print(bp) +print(bp:norm()) --get 1-norm of the Point --- create a subclass using lua -local EvenBetterPoint = nerv.class('nerv.EvenBetterPoint', 'nerv.BetterPoint') -bp = nerv.EvenBetterPoint(1, 2) -print(p:norm()) +print(p.__typename) +print(bp.__typename) |