第一版是針對 Lua 5.0 編寫的。雖然對於後續版本來說仍然有很大的關聯性,但有些地方還是有差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您同時也能贊助 Lua 專案


16.5 – 單一方法方法

當物件只有一個方法時,會出現物件導向程式設計前述方法的一個特殊情況。在這種情況下,我們不需要建立介面表格;相反地,我們可以回傳這個單一方法作為物件表示。如果這聽起來有點奇怪,不妨回想一下第 7.1 節,我們在其中看到如何建構將狀態保留為封閉的迭代器函式。保留狀態的迭代器只不過是一個單一方法物件。

單一方法物件的另一個有趣情況發生在這個單一方法實際上是一個調度方法,會根據一個區別性引數執行不同的任務。這種物件的一個可能的實作如下

    function newObject (value)
      return function (action, v)
        if action == "get" then return value
        elseif action == "set" then value = v
        else error("invalid action")
        end
      end
    end
它的用法很簡單
    d = newObject(0)
    print(d("get"))    --> 0
    d("set", 10)
    print(d("get"))    --> 10

這種非傳統的物件實作相當有效。語法 d("set",10) 雖然有點奇怪,但只比更傳統的 d:set(10) 多兩個字元。每個物件都使用一個單一封閉,比一個表格便宜。沒有繼承,但我們有完全的隱私:存取物件狀態的唯一方法是透過它唯一的函式。

Tcl/Tk 對其小工具使用類似的方法。Tk 中小工具的名稱表示一個函式(一個「小工具命令」),可以對小工具執行各種操作。