1

Lua では、指定されたキーを持つテーブルを割り当てると、次のようになります。

a = { x = 4 }

...またはおそらく...

a = { ['x'] = 4 }

簡単です。ただし、キーに (ドメイン名のように) ピリオドを挿入すると、何も機能しないようです。次のすべてが失敗します。

a = { "a.b.c" = 4 }
a = { a.b.c = 4 }
a = { ['a.b.c'] = 4 }
a = { ["a.b.c"] = 4 }
a = { [a.b.c] = 4 }

これらはすべて同じエラーを返します。

$ ./script.lua
/usr/bin/lua: ./script.lua:49: `}' expected near `='

ここで何が欠けていますか?いくつかの例は非常に簡単で、うまくいくはずです (他の例には明らかな問題があります)。

4

3 に答える 3

4

lua テーブル要素では、名前または式のいずれかになります。言語リファレンスを引用すると、「Lua の名前 (識別子とも呼ばれます) は、数字で始まるものではなく、文字、数字、およびアンダースコアの任意の文字列にすることができます。」、および他のすべては、このコンテキストでは識別子として解釈されます。したがって、a.b.cテーブル インデックスは式として扱われ、実際のテーブル インデックスを取得するために評価されます。これは機能しますが、役に立たないでしょう:

a = { b = { c = 1 } }
x = {}
x['a.b.c'] = 7

print(x['a.b.c'])

foo.a.b.cまた、は に等しく、 にはfoo['a']['b']['c']ないことに注意してくださいfoo['a.b.c']

于 2011-06-27T17:47:22.753 に答える
2
a = { ['a.b.c'] = 4 }
a = { ["a.b.c"] = 4 }

この 2 つはすべて有効です。

a = { [a.b.c] = 4 }

使用される正確な識別子によっては、これ有効である可能性があります。例えば

b = { c = { d = "Ohai!" } } }
a = { [b.c.d] = 4 }

有効です。

インタープリターがそれらが有効でないと言っている場合は、何か間違ったことをしたか、インタープリターにバグがあります。ただし、他のものは有効ではありません。

于 2011-06-27T19:06:29.253 に答える
1

スクリプトに何か問題がありますか?

$ ./lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> a = { ["a.b.c"] = 4 }
> print (a["a.b.c"])
4
> print (a.a)
nil
于 2011-06-27T18:12:47.430 に答える