1 -- 二维向量类
 2 
 3 local P = {
 4     x = 0,
 5     y = 0
 6 }
 7 
 8 Vec2 = P
 9 
10 --setfenv(1, P)
11 
12 local function optAdd(a, b)
13     local o = P:new()
14     o.x = a.x + b.x
15     o.y = a.y + b.y
16     return o
17 end
18 
19 function P:new(x, y)
20     o = {}
21     
22     -- 构造 --
23     o.x = x
24     o.y = y
25     
26     -- 关联 --
27     setmetatable(o, self)
28     self.__index = self
29     
30     -- 操作符重载 --
31     self.__add = optAdd
32     
33     return o
34 end
35 
36 function P:add(x, y)
37     self.x = self.x + x
38     self.y = self.y + y
39 end
40 
41 -- class end
42 
43 obj = Vec2:new(3,2)
44 obj2 = Vec2:new(4)
45 
46 obj3 = obj + obj2
47 
48 print(obj3.x .. "," .. obj3.y)

ps:Lua面向对象的实现方法不止一种。

 

运行结果: