Lua:loadstring 的奇怪行为?

我正在使用 Lua 5.1 中的 loadstring

主要代码

function Object:load_string(str)
    loadstring(str)() -- 此处的 self 是 'nil'
    print(self) -- 此处的 self 是 'table'
end
obj:load_string('print(self)')

输出

> nil
> table: 1557C890

为什么在 loadstring 中使用的 self 解析为 nil 值,而 self 变量可以在函数中访问并直接打印?

点赞
用户5675002
用户5675002

字符串(或文件)中的代码与当前作用域没有任何关联。loadstring()会创建一个新的匿名vararg函数。您必须显式地传递self

function Object:load_string(str)
    loadstring(str)(self) -- 显式传递self
    print(self) -- 这里的self是一个'table'
end

obj:load_string('local self = ...; print(self)')
2017-07-10 16:05:40
用户107090
用户107090

很有可能,str 中的代码包含对self作为全局变量的引用。load_string 中的 self 是一个局部变量,对str中的代码不可访问。

2017-07-10 16:12:37