Lua:loadtring的奇怪行为?

时间:2017-07-10 15:45:52

标签: lua self

我正在使用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值?

2 个答案:

答案 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中的代码无法访问。