類別與繼承 (Classes and inheritance)
試著想像一個情境,如果我們要實作一個 RPG 遊戲,我們該如何設計其中的角色呢?RPG 遊戲中的角色有許多職業,例如戰士與法師。也有路上隨處可見的 NPC,他們沒有職業,但也屬於角色的一部分。這些角色都有一樣的屬性像是:職業、力量、武器、名字等等。
為了減少程式碼與讓程式碼容易被維護與修改,我們會讓所有的角色去共用一份通用的程式碼,讓他們很快的可以擁有角色的基本屬性而不用再重新定義,這個動作就被稱為繼承 (Inheritance )。而那份被共用的程式碼就被稱為類別 (Class)。相關的編程技巧就被稱為物件導向:object-oriented programming (OOP)。
然而 Lua 並不直接支援物件導向,但是我們可以透過一些方法模擬。最簡單的方法是直接透過對表格 (Table) 的操作,而另一種比較複雜的方式則是透過元表(metatable)、元法 (metamethod) 搭配表格 (table)、方法 (method) 、屬性 (attribute) 達成類似的效果。
以下的兩個例子我們建立四個類別:角色 (Character)、戰士 (Warrior)、法師 (Mage)、聖騎士 (Paladin)。戰士 (Warrior.lua)、法師 (Mage.lua) 類別繼承角色類別,而聖騎士 (Paladin.lua) 繼承戰士類別。最後產生 5 為角色:普通人 Kevin、聖騎士 Edison、戰士 Steve、法師 Mary 與 法師 Mark。