为什么会显示“attempt to call nil value”?

这段代码:

local emojis = { one = "", two = "", three = "", four = "", five = "", six = "", seven = "", eight = "", nine = "", zero = "↙️" }

code = "rnjzgrnjzgrnjzg↙️rnjzg↙️rnjzgrnjzg↙️rnjzgrnjzg↙️rnjzg↙️rnjzgrnjzg"
code = code:gsub("rnjzg", "\\")
code = code:gsub(emojis.one, "1")
code = code:gsub(emojis.two, "2")
code = code:gsub(emojis.three, "3")
code = code:gsub(emojis.four, "4")
code = code:gsub(emojis.five, "5")
code = code:gsub(emojis.six, "6")
code = code:gsub(emojis.seven, "7")
code = code:gsub(emojis.eight, "8")
code = code:gsub(emojis.nine, "9")
code = code:gsub(emojis.zero, "0")
load(code)()

总是返回“attempt to call nil value”,为什么?

原文链接 https://stackoverflow.com/questions/68872969

点赞
stackoverflow用户3574628
stackoverflow用户3574628

关于load文档对其返回值进行了如下说明:

如果没有语法错误,load将编译后的块作为函数返回;否则,它返回nil和错误消息。

(“nil”表示nil。)如果我在code定义和load调用之间插入以下内容...

print(code)
print(load(code))

...我会得到以下结果:

\112\114\105\110\116\40\39\104\105\39\41
nil     [string "\112\114\105\110\116\40\39\104\105\39\41"]:1: unexpected symbol near '\'
lua: ./lua.lua:19: attempt to call a nil value
stack traceback:
        ./lua.lua:19: in main chunk
        [C]: in ?

因此,如果您查看两个返回值,您可以在试图调用它之前看到字符串是否是有效的Lua代码。 将load调用更改为以下内容:

local chunk <const>, err <const> = load(code)
if err then
  print(err)
else
  chunk()
end
2021-08-21 13:00:33