lua的loadstring()不使用表

时间:2016-02-10 02:30:57

标签: lua

我有一些文字,我正在尝试通过加载字符串加载它。以下作品:

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

但是当数据是一个表时,它不起作用并给出错误“试图调用零”

local m = loadstring("data = { 1 = 10}")()

2 个答案:

答案 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])

您不需要变量mloadstring将表格放入data - 这是重要的事情。