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

Unable to load precompiled lua bytecode with loadfile or load

我已经使用 luac53 编译了我的 lua 代码并拥有字节码文件。问题是 loadfile 似乎不想加载它并且 returns nil.

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

在以下内容之后也加载 returns nil:

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

文件正在此处作为字符串加载,但 load 或 loadfile 均未执行任何操作。有谁知道为什么会这样?

标准 Lua 函数发出错误的做法是 return nil 后跟一条错误消息。您提供的 Lua 文件可能在加载时产生错误,因此 return 正在处理该文件。但是你永远不会寻找第二个 return 值。

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