“尝试将函数附加到loadfile的结果时,尝试索引全局'f'(函数值)”

时间:2011-08-25 12:38:10

标签: lua

代码说明了一切:

#tryModA.lua:
f,err=loadfile("tryModB.lua")
if not f then
    print("F is nil!!! Err:"..err)
else
    f.fn=function (x)
        print("x="..x)
    end
    f()
end

这是加载的文件:

#tryModB.lua:
fn("hello")

错误:

lua: tryModA.lua:7: attempt to index global 'f' (a function value)
stack traceback:
    tryModA.lua:7: in main chunk
    [C]: ?

问题:为什么会这样?

loadfile()返回一个函数对象并且我可以附加另一个函数是不是真的? PS。我来自JavaScript编程背景,它有基于原型的对象。我假设Lua具有相同的基于原型的对象。

1 个答案:

答案 0 :(得分:2)

在Lua中,loadfile()返回一个函数(不是函数对象),只能调用函数。 “附加”任何类似你正在尝试的功能是不可能的。

现在,Lua表是完全不同的故事,JavaScript中基于原型的概念可能适用于它们(我对JS不是很熟悉)。此时使代码正常工作的最简单方法是将fn设为全局,即将f.fn = function...替换为fn = function...,尽管这可能不是您想要的。