Простой класс


* Родных классов в Lua нет
* Классы в Lua реализуются с помощью таблиц или замыканий

Dog = {}

function Dog:new()
   newObj = { voice = 'wow-wow' }
   self.__index = self
   return setmetatable(newObj, self)
end

function Dog:makeSound()
   print('I say ' .. self.voice)
end

mrDog = Dog:new()
mrDog:makeSound()

Немного более продвинутая версия по материалам lua-users wiki:

Animal = {}

Animal = (function (...)
    local obj = { }
    obj = setmetatable(obj, {
        __index = Animal,
        __call = function(cls, ...)
            return cls:new(...)
        end
    })
    return obj
end)()

function Animal:new(init)
    local obj = { size = init or 1 }
    self.__index = self
    return setmetatable(obj, self)
end

function Animal:get_size()
    return self.size
end

function Animal:set_size(s)
    self.size=s
end

local a = Animal(10)
local b = Animal(6)

print( a:get_size() )
a:set_size(5)
print( a:get_size() )
print( b:get_size() )