[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: OO library w/ functions to create classes? (Re: syntaxic shugar proposition : generic do block)
- From: PA <petite.abeille@...>
- Date: Wed, 29 Nov 2006 20:25:27 +0100
On Nov 29, 2006, at 19:54, Sam Roberts wrote:
Does anybody have any links to such an OO library?
Nope. But you could roll your own :)
For example, using the module function:
local function extends( aSuper )
return function( aClass )
setmetatable( aClass, aSuper )
aClass.__index = aClass
aClass.self = aClass
aClass.super = aSuper
if aClass.initialize then
aClass:initialize()
end
return aClass
end
end
local class = module
-- define the root class
class( "Object", extends(), package.seeall )
function self:initialize()
print( "initialize", self:className() )
return self
end
function self:new( ... )
local anObject = {}
local aClass = self:class()
setmetatable( anObject, aClass )
return anObject
end
function self:class()
return self._M
end
function self:className()
return self._NAME
end
function self:itself()
return self
end
function self:superclass()
return self.super
end
function self:value()
return 1
end
function self:doIt()
return "do it" .. self:value()
end
-- define a subclass
class( "MyObject", extends( Object ) )
function self:value()
return 2
end
function self:doIt()
return "about to " .. super.doIt( self )
end
print( self:className() )
-- define a another subclass
class( "MyOtherObject", extends( MyObject ) )
function self:value()
return 3
end
function self:doIt()
return super.doIt( self ) .. " well"
end
local AnotherObject = require( "Object" )
print( 1, AnotherObject:className() )
print( 2, AnotherObject:doIt() )
print( 3, self:doIt() )
print( 4, self:itself():superclass():superclass():className() )
print( 5, self:class():className() )
print( 6, self )
print( 7, self:class() )
print( 8, self:new():className() )
print( 9, self:new():doIt() )
> 1 Object
> 2 do it1
> 3 about to do it3 well
> 4 Object
> 5 MyOtherObject
> 6 table: 0x104af0
> 7 table: 0x104af0
> 8 MyOtherObject
> 9 about to do it3 well
Cheers,
PA.