如何在 Lua 中运行一个函数而不使用脚本中定义的任何函数

我正在尝试将字符串加载为函数并运行它。这是我的问题:

a = "hello"
loadstring("print(a)")()

我不想让上面的代码使用它外部的任何变量/函数。我的目标是使上述脚本打印 nil,因为 a 在 loadstring 内部未定义。

如果问题很简要,我很抱歉。很难解释我的问题。

点赞
用户7509065
用户7509065

你的变量 a 存在于全局环境中。为了防止你的代码块看到它,你需要给它一个不同的环境。在 Lua 5.1 中,你可以这样做:

a = "hello"
local chunk = loadstring("print(a)")
setfenv(chunk, {print = print})
chunk()

在 Lua 5.2 或更新的版本中,你可以这样做:

a = "hello"
load("print(a)", nil, "t", {print = print})()

需要注意的是 print 并不是魔法函数。除非你显式地将它放入新的环境中,否则它将不会在新的环境中。

2020-12-11 06:47:18