2009-03-26 11 views
10

中括弧( '{'と '}')がLuaで使用されている場合、それらはどのように使用されていますか?Luaで中括弧を使用していますか?

+1

私はそれらを交換するためのシンプルなプリプロセッサの追加について興味がありました"do/then"と "end"を使って少し冗長にします。 – Sydius

+0

トークンフィルタとmetalua、www.lua.orgで発見のLua-Lメーリングリストで頻繁に参照の両方を見てみましょう。両方とも、抽象構文ツリーレベルで言語を変更する方法を提供し、これを行うことができます。プリプロセッサは、正しい結果を得るために多くの解析を行う必要があります。 – RBerteig

答えて

33

表リテラル。

テーブルはLuaの中心型であり、連想配列(ハッシュテーブルまたは辞書)または通常の配列として扱うことができます。キーはnilを除く任意のLuaタイプの値にすることができ、テーブルの要素はnil以外の任意の値を保持できます。

アレイメンバーへのアクセスは、バックグラウンドでのハッシュキーアクセスよりも効率的ですが、詳細は通常は重要ではありません。実際には、値が格納されているセルに対してのみストレージを割り当てる必要があるため、スパース配列を扱うのが便利です。

これは、Cプログラマにとってちょっと変わった普遍的な1ベースの配列のイディオムにつながります。

a = { 1, 2, 3 } 

例えば

は(偶然に)それらのインデックスと同じ値を持っていることを三つの要素と変数aに格納された配列を作成します。非整数キーを使用してテーブルを初期化3.

は次のように行うことができる要素は1から始まるシーケンシャルインデックスに格納されるため、aの長さ(#a又はtable.getn(a)によって与えられる)されている:

b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 } 

bは、 "one"、 "pi"、 "half pi"、および無名関数という名前のエントリを持ちます。もちろん、テーブルを反復せずに最後の要素を調べることは、その非常に大きな関数のコピーが他の変数に格納されていない限り難しいかもしれません。

中括弧が現れる別の場所は、実際には同じセマンティックな意味ですが、構文上の砂糖の後ろに(Luaの新しいユーザーにとって)隠されています。テーブルでなければならない単一の引数をとる関数を書くのが一般的です。その場合、関数を呼び出すには括弧を使用する必要はありません。これは、両方とも明らかに関数呼び出し演算子として使用される(){}の組み合わせを含むように見えるコードになります。

btn = iup.button{title="ok"} 

btn = iup.button({title="ok"}) 

に同等であるだけでなく、目にあまり難しいです。ちなみに、リテラル値を持つ単一引数の関数を呼び出すと、文字列リテラルでも機能します。唯一の一般的なケースだ

t = {'a', 'b', 'c'} 

:あなたがCで使用するよう

4

リスト/ディシジョン・コンストラクタ(つまり、表型コンストラクタ)です。

コードブロックには使用されません。そのため、Luaはendキーワードを使用してブロックを終了します。

See here

+0

ああ、今、私は今や馬鹿だと感じます。 – Sydius

+0

Luaにはリストや辞書はありませんが、両方として機能する "テーブル"タイプです。したがって、中括弧はテーブルコンストラクタとして使用されます。 –

+0

@Alexander Gladysh:ありがとう、私は答えを調整した。 –

1

彼らはテーブルリテラルを使用しています。ブロック区切り文字には使用されません。Luaのテーブルで、あなたはさまざまな種類の値を置くことができます。

t={"foo", 'b', 3} 

ます。また、ラ・パイソンA、dictionnariesとしてそれらを使用することができます。

t={name="foo", age=32} 
関連する問題