![]() |
Programming in Lua | ![]() |
Part II. Tables and Objects Chapter 11. Data Structures |
Suppose you want to list all identifiers used in a program source; somehow you need to filter the reserved words out of your listing. Some C programmers could be tempted to represent the set of reserved words as an array of strings, and then to search this array to know whether a given word is in the set. To speed up the search, they could even use a binary tree or a hash table to represent the set.
In Lua, an efficient and simple way to represent such sets is to put the set elements as indices in a table. Then, instead of searching the table for a given element, you just index the table and test whether the result is nil or not. In our example, we could write the next code:
reserved = { ["while"] = true, ["end"] = true, ["function"] = true, ["local"] = true, } for w in allwords() do if reserved[w] then -- `w' is a reserved word ...(Because while is a reserved word in Lua, we cannot use it as an identifier. Therefore, we cannot write
while = 1
;
instead, we use the ["while"] = 1
notation.)
You can have a clearer initialization using an auxiliary function to build the set:
function Set (list) local set = {} for _, l in ipairs(list) do set[l] = true end return set end reserved = Set{"while", "end", "function", "local", }
Copyright © 2003-2004 Roberto Ierusalimschy. All rights reserved. |
![]() |
![]() |