代码说明了一切:
#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具有相同的基于原型的对象。
在Lua中,loadfile()
返回一个函数(不是函数对象),函数只能被调用。
现在,Lua表是完全不同的故事,JavaScript的基于原型的概念可能适用于它们(我不太熟悉JS)。在这一点上,让你的代码工作的最简单的方法是使fn
全局,即用fn = function...
代替f.fn = function...
,尽管这可能不是你想要的。