问题
当我将Lua关键字do
作为表的键时,会出现以下错误:
> table.newKey = { do = 'test' }
stdin:1: unexpected symbol near 'do'
>
我需要把
do
作为键名。我该怎么做?sometable.somekey
是sometable['somekey']
的简写方式,
类似地,{ somekey = somevalue }
是{ ['somekey'] = somevalue }
的简写方式。
这样的信息可以在这个非常好的资源中找到:
-- Lua 编程:3.6 – 表构造器For such needs, there is another, more general, format. In this format, we explicitly write the index to be initialized as an expression, between square brackets:
opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}
t = { ['do'] = 'test' }
使用t['key']
来获取或设置值。
t = { a = b}
或t.a = b
。The general syntax for constructors is
tableconstructor ::= ‘{’ [fieldlist] ‘}’ fieldlist ::= field {fieldsep field} [fieldsep] field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp fieldsep ::= ‘,’ | ‘;’
表单字段
name = exp
等同于["name"] = exp
。
那么为什么这对do
不起作用呢?
Names (also called identifiers) in Lua can be any string of Latin letters, Arabic-Indic digits, and underscores, not beginning with a digit and not being a reserved word. Identifiers are used to name variables, table fields, and labels.
The following keywords are reserved and cannot be used as names:
and break do else elseif end false for function goto if in local nil not or repeat return
do
不是一个名称,所以你需要使用语法field ::= ‘[’ exp ‘]’ ‘=’ exp
在你的例子中,应该这样写:table.newKey = { ['do'] = 'test' }