无法使用 loadfile 或 load 加载预编译的 lua 字节码

我使用 luac53 编译了我的 lua 代码并生成了字节码文件,但是 loadfile 似乎无法加载它并返回 nil。

local func = loadfile("file.txt")//返回 nil

在以下操作后,load 也会返回 nil:

local file = io.open("file.txt", "rb")
local str = file:read("*a")
file:close()
local func = load(str, "bt")//返回 nil

此处文件被作为字符串加载,但是 load 和 loadfile 都没有做任何事情。有人知道为什么会出现这种情况吗?

点赞
用户734069
用户734069

标准 Lua 函数发生错误时应返回 nil,然后是错误消息。您提供的 Lua 文件可能在加载时生成错误,因此返回了错误。但您从未查找第二个返回值。

assert 在这里很有用,因为它需要测试值和一个字符串以在出现错误时打印。因此,如果您执行 assert(loadstring(...)),则会打印出 loadstring 返回的错误,如果它出错了。作为奖励,assert 将返回它所给出的第一个参数,因此如果 loadstring 成功,assert(loadstring(...)) 将返回加载的块。

2018-07-09 02:36:52