我正在使用loadstring
和Lua 5.1:
主要
function Object:load_string(str)
loadstring(str)() -- self in this is 'nil'
print(self) -- self here is a 'table'
end
obj:load_string('print(self)')
输出
> nil
> table: 1557C890
为什么self
中使用的loadstring
在函数中可以访问nil
变量并且可以直接打印时解析为self
值?
答案 0 :(得分:1)
字符串(或文件)中包含的代码以任何方式与当前范围无关。 loadstring()
创建新的匿名vararg函数。您必须明确传递self
。
function Object:load_string(str)
loadstring(str)(self) -- pass self explicitly
print(self) -- self here is a 'table'
end
obj:load_string('local self = ...; print(self)')
答案 1 :(得分:1)
最有可能的是,che
中的代码包含对str
的引用作为全局变量。 self
中的self
是本地变量,load_string
中的代码无法访问。