この初版は Lua 5.0 向けに書かれました。後続バージョンとの関連は依然として大きいですが、いくつかの違いがあります。
第 4 版は Lua 5.3 を対象としており、Amazon やその他の書店で購入できます。
書籍を購入することで、Lua プロジェクトのサポートにも貢献できます。
![]() |
Programming inLua | ![]() |
| 第 II 部。テーブルとオブジェクト 第 11 章。データ構造 |
プログラムのソースで使用されているすべての ID を一覧表示したいとします。なんらかの方法で、予約語を一覧から除外する必要があります。一部の 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", }
| Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |