无法使用 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 加载的块。
我已经使用 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 加载的块。