LUAテーブルの構成

10450 ワード

コンストラクタは、テーブルを作成および初期化する式です.時計はLuaならではの機能が強いもの.最も簡単なコンストラクション関数は、空のテーブルを作成するために{}です.配列を直接初期化できます.
days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}

Luaは「Sunday」をdays[1](最初の要素インデックスが1)に初期化し、「Monday」でdaysを初期化する[2]...
print(days[4]) --> Wednesday

コンストラクション関数は、任意の式で初期化できます.
tab = {sin(1), sin(2), sin(3), sin(4),sin(5),sin(6), sin(7), sin(8)}

 
テーブルをrecordとして初期化するには、次のようにします.
a = {x=0, y=0} <--> a = {}; a.x=0; a.y=0

どのようにtableを作成するかにかかわらず、テーブルに任意のタイプのドメインを追加または削除することができます.コンストラクション関数はテーブルの初期化にのみ影響します.
w = {x=0, y=0, label="console"}
x = {sin(0), sin(1), sin(2)}
w[1] = "another field"
x.f = w
print(w["x"]) --> 0
print(w[1]) --> another field
print(x.f[1]) --> another field
w.x = nil -- remove field "x"

コンストラクション関数を呼び出すたびに、Luaは新しいtableを作成し、tableを使用してlistを構築できます.
list = nil
for line in io.lines() do
  list = {next=list, value=line}
end

 
このコードは標準入力から各行に読み込まれ、逆シーケンスでチェーンテーブルが形成されます.次のコードは、チェーンテーブルの内容を印刷します.
l = list
while l do
    print(l.value)
    l = l.next
end

同じコンストラクション関数で、リストスタイルとrecordスタイルをブレンドして初期化できます.たとえば、次のようにします.
polyline = {color="blue", thickness=2, npoints=4,{x=0, y=0},{x=-10, y=0},{x=-10, y=1},{x=0, y=1}}

 
この例はまた、複雑なデータ構造を表すために構造関数をネストできることを示している.
print(polyline[2].x) --> -10

上記の2つのコンストラクション関数の初期化方法には、負のインデックスを使用してテーブル内の要素を初期化することはできません.文字列インデックスも適切に表すことはできません.以下では、[expression]で表示される初期化されるインデックスを表すより一般的な初期化方法について説明します.
opnames = {["+"] = "add", ["-"] = "sub",["*"] = "mul", ["/"] = "div"}
i = 20; s = "-"
a = {[i+0] = s, [i+1] = s..s, [i+2] = s..s..s}
print(opnames[s]) --> sub
print(a[22]) --> ---

Listスタイル初期化とrecordスタイル初期化は、このような一般的な初期化の特例です.
{x=0, y=0} <--> {["x"]=0, ["y"]=0}
{"red", "green", "blue"} <-->{[1]="red", [2]="green", [3]="blue"}

本当に配列の下付きを0から始めたい場合は、次の手順に従います.
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}

 
注意:配列の下付き文字は0から始まることを推奨しません.そうしないと、多くの標準ライブラリでは使用できません.コンストラクション関数の最後の「,」はオプションで、以降の拡張を容易にすることができます.
a = {[1]="red", [2]="green", [3]="blue",}

コンストラクション関数のドメイン区切り記号(",")は、セミコロン(";")で使用できます.代わりに、通常、異なるタイプのテーブル要素を分割するためにセミコロンを使用します.
{x=10, y=45; "one", "two", "three"}

 
 
転載先:https://www.cnblogs.com/liqiu/archive/2013/05/29/3106178.html