1.はじめに
Luaにはテーブルという基本的なデータ構造しかなく、配列やクラスなど他のデータ構造はすべてテーブルとして実装することができます。
2.テーブル添え字
例 e05.lua
-- Arrays
myData = {}
myData[0] = 「foo”
myData[1] = 42
-- Hash tables
myData[バー”] = バズ”
-- Iterate through the
-- structure
for key, value in myData do
print(key .. = .. value) end
出力結果
0=フー
1=42
バー=バズ
手続きの説明
まず、テーブル myData={} を定義し、そこに添え字として数値を使用して 2 つの値を代入します。 これはC言語の配列に似ていますが、配列とは異なり、配列の各要素は同じ型である必要はありません。
プログラムの後半では、文字列を添え字として使用して、テーブルに別の要素を追加します。 このテーブルは、STLのマップによく似ています。テーブルの添え字には、nil値を除き、Luaがサポートする基本的な型を使用できます。
テーブルのメモリフットプリントに関するLuaの処理は、以下のコードに示すように自動的に行われます。
a = {}
a["x"] = 10
b = a -- `b' refers to the same table as `a'
print(b["x"]) --> 10
b["x"] = 20
print(a["x"]) --> 20
a = nil -- now only `b' still refers to the table
b = nil -- now there are no references left to the table
bとaはどちらも同じテーブルを指し、1ブロックのメモリしか占有しません。
b=nil に達すると、テーブルを指す変数がなくなるため、Lua は自動的にテーブルを解放します。
3.テーブルネスティング
テーブルは、次の例のように入れ子にすることもできます。
例 e06.lua
-- Table 'コンストラクタ'
myPolygon = {
color=「ブルー”,
thickness=2,
npoints=4;
{x=0, y=0},
{x=-10, y=0},
{x=-5, y=4},
{x=0, y=4}
}
-- Print the color
print(myPolygon[ ”])
-- Print it again using dot
-- notation
print(myPolygon.color)
-- The points are accessible
-- in myPolygon[1] to myPolygon[4]
-- Print the second point’s x
-- coordinate
print(myPolygon[2].x)
手続きの説明
まずテーブルを作成しますが、前の例とは異なり、テーブルコンストラクタの{x=0,y=0}の中に、これはどういう意味ですか? これは実際には小さなテーブルで、大きなテーブルで定義され、小さなテーブルのテーブル名は省略されています。
最後の行、myPolygon[2].xは、大きなテーブルの中の小さなテーブルにアクセスする方法です。





