我有一些文字,我正在尝试通过加载字符串加载它。以下作品:
local m = loadstring("data = 5")()
但是当数据是一个表时,它不起作用并给出错误“试图调用零”
local m = loadstring("data = { 1 = 10}")()
答案 0 :(得分:2)
lua中的表声明要求将整数键放在方括号内:
data = {
[1] = value,
}
方括号中的键的封闭始终是允许的,有效的和可能的。如果您的密钥遵循以下模式,则可以跳过它:[A-Za-z_][A-Za-z0-9_]*
(与lua中的有效变量名称相同)
答案 1 :(得分:0)
如果您添加了assert
,则会收到更有用的消息:
local m = assert (loadstring("data = { 1 = 10}"))()
结果:
stdin:1: [string "data = { 1 = 10}"]:1: '}' expected near '='
stack traceback:
[C]: in function 'assert'
stdin:1: in main chunk
[C]: ?
实际上回答这个问题,除非表键碰巧遵循Lua变量命名规则,否则你必须把它放在方括号内,例如。
local m = assert (loadstring("data = { [1] = 10}"))()
当我这样做时,m仍然是零
这有什么关系? loadstring
已完成。
这样做:
assert (loadstring("data = { 1 = 10}"))()
print (data [1])
您不需要变量m
。 loadstring
将表格放入data
- 这是重要的事情。