此第一版为 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", }