-- Сложение дробных чисел a.b + a.b f1 = {a = 1, b = 2} f2 = {a = 2, b = 3} -- This would fail: -- s = f1 + f2 metafraction = {} function metafraction.__add(f1, f2) sum = {} sum.b = f1.b * f2.b sum.a = f1.a * f2.b + f2.a * f1.b return sum end setmetatable(f1, metafraction) setmetatable(f2, metafraction) -- call __add(f1, f2) for f1 s = f1 + f2 Еще простой пример Dog={} function Dog:new(q) q = q or { name='1', age=1 } setmetatable(q, self) self.__index = self self.__len = function (self) return self.age+10 end return q end function Dog:dump() print(self.name..': '..self.age) end p1 = Dog:new() p2 = Dog:new() p2.name = '2' p2.age = 2 p1:dump() p2:dump() print(#p1)
Lua Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor