LUA > OOP > Komplex számok

LUA noha nem OOP nyelv, de adott a lehetőség objektumok létrehozására. A dolog hasonlít a JavaScriptnél megismert prototájpolásra. Itt most a Komplex számokat próbáljuk egységbe zárni.

Ha visszaemlékszünk tanulmányainkra, akkor egy Komplex szám áll egy valós és egy képzetes részből.
Az összeadás így néz ki:
C = A + B --> c.r = a.r + b.r és c.r = a.i + b.i

Azt hiszem a kódot böngészve két dolog mindenképp magyarázatot követel:
(1) setmetatable metódus jelentősége
(2) self.__index mibenléte

(1) a metatable egy tábla, amiben ha létrehoztunk mondjuk az __add függvényt akkor két tábla összeadása hirtelen értelmet nyerhet, mert ezek a függvények hívódnak meg
(2) A .__index metametódus, azaz akkor hívódik meg, ha olyan tábla értéket akarunk meghívni, ami nem létezik.
Kód:



Complex={
}

function Complex:new() -- Complex.new(self) és a Complex:new() ugyanazt jelenti
	
	o = {}
	setmetatable(o, self)
	self.__index = self
	return o
end

function Complex:set(r,i)
	self.r = r
	self.i = i
end


function Complex:dump()
	print("r: "..self.r, "i:"..self.r)
end
function Complex:getr()
	return self.r
end
function Complex:geti()
	return self.i
end
function Complex:add(c2)
	o = self:new()
	o:set(self:getr() + c2:getr() , self:geti() + c2:geti())
	return o
end

a = Complex:new()
b = Complex:new()



a:set(3,4)
a:dump()

b:set(4,5)
b:dump()

c=a:add(b)

c:dump() -- r: 7 i: 9

-- Operator Overload (update) --

Complex.__add=Complex.add -- mivel a setmetable-lel korábban saját magát állítottam be 
                          -- metatáblának így egyszerűen az __add mezőbe másolom az összeadás függvényt

d = b + c -- r: 11 i: 14
d:dump()




Hozzászólások

Operator overload nincs?
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Ez biztos csak nekem erdekes megoldas, de hat en nem is ismerem a Lua-t, szoval az en velemenyem keveset nyom a latban. Mindenesetre... furcsa. Gondolom a Lua alapvetoen azert nem teljesen objektumorientalt...
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.