第一版是針對 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您也協助 支援 Lua 專案


第 13 章 – 元表格和元方法

通常,Lua 中的表格具有一組可預測的運算。我們可以新增金鑰值對,我們可以檢查與金鑰關聯的值,我們可以遍歷所有金鑰值對,僅此而已。我們無法新增表格,我們無法比較表格,我們也無法呼叫表格。

元表格允許我們變更表格的行為。例如,使用元表格,我們可以定義 Lua 如何計算運算式 a+b,其中 ab 是表格。每當 Lua 嘗試新增兩個表格時,它會檢查其中任一個是否有元表格,以及該元表格是否有 __add 欄位。如果 Lua 找到此欄位,它會呼叫對應的值(所謂的元方法,應為函式)來計算總和。

Lua 中的每個表格都可以有自己的元表格。(稍後我們將看到,使用者資料也可以有元表格。)Lua 始終會建立沒有元表格的新表格

    t = {}
    print(getmetatable(t))   --> nil
我們可以使用 setmetatable 來設定或變更任何表格的元表格
    t1 = {}
    setmetatable(t, t1)
    assert(getmetatable(t) == t1)
任何表格都可以成為任何其他表格的元表格;一群相關表格可以共用一個共通的元表格(描述它們的共通行為);一個表格可以是它自己的元表格(以便描述它自己的個別行為)。任何組態都是有效的。