代码说明了一切:
#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具有相同的基于原型的对象。
答案 0 :(得分:2)
在Lua中,loadfile()
返回一个函数(不是函数对象),只能调用函数。 “附加”任何类似你正在尝试的功能是不可能的。
现在,Lua表是完全不同的故事,JavaScript中基于原型的概念可能适用于它们(我对JS不是很熟悉)。此时使代码正常工作的最简单方法是将fn
设为全局,即将f.fn = function...
替换为fn = function...
,尽管这可能不是您想要的。