(Object Oriented Programming,OOP)是一種非常流行的計算機編程架構。
Lua中最基本的結構是table,所以需要用table來描述對象的屬性。
Lua中的function可以用來表示方法。那么Lua中的類可以通過table + function模擬出來。
簡例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
-- Czhenya Lua 面向對象 -- 對于一個對象來說, 屬性 方法 --[[ 兩種定義函數的方式 person.eat = function() print(person.name.."在寫LUA") end function person.eat() print(person.name.."在寫LUA") end --]] --作為原型 Person = {name = 'Czhena',age = 22} function Person:eat() print(self.name.."的年齡是"..self.age) end function Person:new(o) -- 若o是空的則返回false local t = o or {} --[[ 和下面設置結果一樣,只是兩種不同的方式 setmetatable{t,self} self.__index=self --]] setmetatable(t,{__index = self}) --設置元表 --調用一個屬性的時候,如果t中不存在,就會在__index所指的table中查找 return t end -- 類似于通過構造函數創建對象 person1 = Person:new({weight = 100}) person2 = Person:new() print(person1.name) print(person1.weight) print(person2.name) person1.name = "CZY" --不會改變元表,添加到person.name person1:eat() person2:eat() --繼承 Student = Person:new() Student.grade = 1 stu1 = Student:new() stu1:eat() print(stu1.grade) |
冒號和點定義函數的區別:
1
2
3
4
5
6
7
8
9
10
11
|
-- 使用冒號和點來的定義函數,建議用什么定義函數,用什么調用 person = {name="Czhenya",age=22} function person:eat() print(self.name.."的年齡是"..self.age) end person.eat(person) a = person --冒號調用self自動賦值 a:eat() --通過點來調用的時候,self不會自動賦值,必須通過參數傳遞 a.eat(a) |
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/Czhenya/article/details/78484215