Lua 面向对象

面向对象

  组成:成员变量、成员函数

  要求:每个对象,由类生成,有自己的成员变量、使用共同的成员函数

Lua构造面向对象

  原理

    用table表示成员变量

    用function表示成员函数

    用metatable关联对象和类

  实现

 1 -- 空类
 2 Class = {}
 3 
 4 -- 指向自己
 5 Class.__index = Class
 6 
 7 -- 成员变量
 8 Class.val = "Class"
 9 
10 -- 成员函数
11 function Class:print()    --相当 Class.print(self)
12     print("Class:print val = "..self.val)
13 end
14 
15 function Class:modify()
16     self.val = "modify"
17 end
18 
19 -- 构造函数
20 function Class:new(initVal)
21     -- 申请空间
22     local object = {}
23 
24     -- 初始数据
25     object.val = initVal
26 
27     -- 关联class
28     setmetatable(object,Class)
29 
30     -- 返回对象
31     return object
32 end
33 
34 -- test
35 local obj = Class:new("object")
36 print("before modify")
37 Class:print()
38 obj:print()
39 print("after modify")
40 obj:modify()
41 Class:print()
42 obj:print()
43 
44 -- output
45 -- before modify
46 -- Class:print val = Class
47 -- Class:print val = object
48 -- after modify
49 -- Class:print val = Class
50 -- Class:print val = modify