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 }

这两个都是有效的。

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 回答