lua的loadstring()无法处理表格

我有一些文本,正在尝试通过load string来加载它。以下内容有效:

local m = loadstring("data = 5")()

但是,当数据是表格时,它不起作用并显示错误“试图调用nil”

local m = loadstring("data = { 1 = 10}")()
点赞
用户1190388
用户1190388

Lua 中的表声明需要将整数键放在方括号内:

data = {
  [1] = value,
}

键用方括号括起来总是允许、有效和可能的。只要您的键遵循模式:[A-Za-z_][A-Za-z0-9_]*(与 Lua 中有效的变量名相同),则可以省略它。

2016-02-10 02:47:42
用户5043289
用户5043289

如果你添加了一个 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 仍然是 nil

那又怎样呢? loadstring 已经完成了。

只需要这样做:

assert (loadstring("data = { 1 = 10}"))()
print (data [1])

你不需要变量 mloadstring 将一个表放入 data 中 - 这才是重要的事情。

2016-02-10 05:32:37