【问题标题】:lua's loadstring() not working with tableslua 的 loadstring() 不适用于表
【发布时间】:2016-02-11 03:40:37
【问题描述】:

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

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

但是当数据是表格时,它不起作用并给出错误“尝试调用 nil”

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

【问题讨论】:

  • 您应该在尝试执行之前验证您尝试编译的代码是有效的 Lua 代码。

标签: lua


【解决方案1】:

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

data = {
  [1] = value,
}

方括号中的键始终是允许的、有效的和可能的。如果您的密钥遵循以下模式,则可以跳过它:[A-Za-z_][A-Za-z0-9_]*(与 lua 中的有效变量名相同)

【讨论】:

  • 看来我需要把我的表改成 sting 函数了!
【解决方案2】:

如果您添加了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 - 这很重要。

【讨论】:

  • 当我这样做时,m 仍然为零。
猜你喜欢
  • 1970-01-01
  • 2021-10-07
  • 2018-11-30
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2022-06-29
相关资源
最近更新 更多