lua-users home
lua-l archive

Implementing "super()" for classes

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


I have a lightweight object orientation module. It's centred around this "createClass" function:
 function createClass(base)
 local newClass = {} -- Contains class methods
 local classMeta = { __index = newClass }
 if base
 then
 setmetatable(newClass, { __index = base })
 end
 -- Object creation is assumed to be Objective C style.
 -- Classes are expected to have an "init" method for
 -- initializing its variables.
 --
 -- object = Class.new()
 -- object:init(data1, data2, ... dataN)
 function newClass.new()
 local instance = {}
 setmetatable(instance, classMeta) -- "instance" may access
 -- class methods
 return instance
 end
 return newClass
 end
I would define and use classes like this:
 MyClass = createClass()
 -- The "constructor"
 function MyClass:init(data)
 self.data = data
 end
 function MyClass:printData()
 print(self.data)
 end
 object = MyClass.new()
 object:init('Hello')
 object:printData()
My issue is that I am unsure how to implement a "super" construct for accessing an object's superclass methods. Ideally I'd be able to do something like this:
 MySubclass = createClass(MyClass)
 function MySubclass:init(data, extraData)
 self:super():init(data)
 self.extraData = extraData
 end
 function MySubclass:printData()
 self:super():printData()
 print(self.extraData)
 end
"self:super()" would, I assume, return a table with the object's data but with the functions of the superclass. Could this be accomplished by making a copy of the object table and setting its metatable to the base class table?

AltStyle によって変換されたページ (->オリジナル) /