Luaで中括弧('{'および'}')が使用されている場合、それらは何に使用されますか?
3 に答える
テーブル リテラル。
テーブルは Lua の中心的なタイプであり、連想配列 (ハッシュ テーブルまたは辞書) または通常の配列として扱うことができます。キーは を除く任意の Lua タイプの値にすることがnil
でき、テーブルの要素は を除く任意の値を保持できますnil
。
配列メンバーへのアクセスは、バックグラウンドでハッシュ キーへのアクセスよりも効率的に行われますが、通常は詳細は重要ではありません。ストレージは、値を含むセルにのみ割り当てる必要があるため、スパース配列の処理が実際に便利になります。
これは、C プログラマーにとって少し奇妙に感じる普遍的な 1 ベースの配列イディオムにつながります。
例えば
a = { 1, 2, 3 }
a
(偶然にも) インデックスと同じ値を持つ 3 つの要素を持つ変数に格納された配列を作成します。要素は 1 から始まる順次インデックスに格納されるため、 (またはでa
指定される) の長さは 3 です。#a
table.getn(a)
非整数キーでテーブルを初期化するには、次のようにします。
b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 }
whereb
には、「one」、「pi」、「half pi」という名前のエントリと、無名関数があります。もちろん、その関数のコピーが他の変数に格納されていない限り、テーブルを反復せずに最後の要素を検索するのは難しいかもしれません。
中括弧が表示される別の場所は、実際には同じ意味の意味ですが、(Lua の新しいユーザーにとって) 構文糖衣の背後に隠されています。テーブルでなければならない単一の引数を取る関数を作成するのが一般的です。その場合、関数の呼び出しに括弧を使用する必要はありません。これにより、明らかに関数呼び出し演算子として使用されている()
との両方が混在しているように見えるコードが生成されます。{}
btn = iup.button{title="ok"}
と同等です
btn = iup.button({title="ok"})
目への負担も少ないです。ちなみに、リテラル値を使用して単一引数の関数を呼び出すことは、文字列リテラルでも機能します。
リスト/基本コンストラクター(つまり、テーブル型コンストラクター)。
それがあなたの言いたいことなら、それらはコードブロックには使用されません。そのため、Luaはendキーワードを使用してブロックを終了します。
C で使用するように、テーブル リテラルに使用されます。
t = {'a', 'b', 'c'}
それが唯一の一般的なケースです。ブロック区切り文字には使用されません。lua テーブルには、さまざまなタイプの値を入れることができます。
t={"foo", 'b', 3}
Python 風に辞書として使用することもできます:
t={name="foo", age=32}