Привет. Я написал на досуге решение для создания классов a-la Ruby в Lua. Публикую здесь, в надежде, что это может быть интересно. Код | -- Ruby-like classes in Lua
local object_methods = {} object_methods.__index = object_methods Object = {__instance_methods = object_methods}
local class_methods = {} class_methods.__index = class_methods Class = {__instance_methods = class_methods}
setmetatable(Object,class_methods) --Object is Class setmetatable(Class,class_methods) --Class is Class setmetatable(class_methods,object_methods) --any class is Object
function object_methods:initialize() end
function class_methods.__call(cls,...) --new local instance = {} setmetatable(instance,cls.__instance_methods) instance:initialize(...) return instance end
function class_methods.initialize(newclass,instance_methods,super) instance_methods.__index = instance_methods newclass.__instance_methods = instance_methods setmetatable(instance_methods,(super or Object).__instance_methods) end
function class_methods.derivedclass(super,instance_methods) return Class(instance_methods,super) end
|
После этого можно писать что-то в этом роде Код |
o = Object()
A = Class{ f = function() print 'Boo!' end } a = A() a:f()
B = A:derivedclass{} b = B() b:f()
|
Это не единственный способ реализации классов в Lua. К тому же, это не полный (но легко расширяемый) код. Другие примеры реализации классов можно найти в официальном учебнике и на форуме пользователей.
|