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


11.5 – 集合和多重集合

假設您想要列出程式碼來源中使用的所有識別碼;您需要以某種方式從您的清單中篩選出保留字。有些 C 程式設計師可能會想將保留字集合表示為字串陣列,然後搜尋此陣列來得知集合中是否有某個特定的字詞。為了加快搜尋速度,他們甚至可以使用二元樹或雜湊表來表示集合。

在 Lua 中,表示此類集合的有效且簡單的方式是將集合元素放入表格的索引中。然後,您只要索引表格並測試結果是否為 nil,而不必在表格中搜尋特定元素。在我們的範例中,我們可以撰寫以下程式碼

    reserved = {
      ["while"] = true,     ["end"] = true,
      ["function"] = true,  ["local"] = true,
    }
    
    for w in allwords() do
      if reserved[w] then
        -- `w' is a reserved word
        ...
(因為 while 是 Lua 中的保留字,所以我們無法將它用作識別碼。因此,我們無法撰寫 while = 1;我們改用 ["while"] = 1 符號。)

您可以使用輔助函數來建立集合,這樣初始化會更清楚

    function Set (list)
      local set = {}
      for _, l in ipairs(list) do set[l] = true end
      return set
    end
    
    reserved = Set{"while", "end", "function", "local", }