尝试复制this simple Lua example(使用第二个帖子中的改进代码),我遇到了以下奇怪的问题:
我逐字复制了代码,但碰巧调用了第一个文件“ table.lua ”(而不是“ funcs.lua ”)。 第二个文件名为“ main.lua ”,如示例所示。
在我的情况下,无论我尝试过什么,我总是得到流行的错误消息“a ttempt to call field'myfunc'(一个零值)”(就好像require语句被忽略了;但路径等都是有序的。)
经过两个小时的尝试和寻找信息后,我或多或少地在预感中将第一个文件从“ table.lua ”重命名为“ tabble.lua ” ,然后一切都按预期顺利运作。重命名为例如“ tables.lua ”也可以使用。
作为Lua的新手,我仍然想知道到底出了什么问题。最初我认为原因可能是“ table ”是一个保留的Lua字,但我检查过的所有引用都没有列出它。
那么这里发生了什么?
我使用随附的SciTE编辑器/ IDE(v.1.75)使用LuaForWindows v5.1.4-46。
感谢所有提示。
答案 0 :(得分:3)
标准库math
,io
,string
,...和table
是在Lua解释器中预定义(和预加载)的。因为需要按名称缓存模块,所以require "table"
将返回标准table
库,而不是从文件中加载您自己的table
模块。
解决问题的一个好方法是创建一个文件夹并将库文件放在那里。如果文件夹名为mylib
,则require "mylib.table"
将起作用并加载文件。
或者,如果您只需要加载文件一次而不需要require
的功能(在多个目录中搜索文件,缓存加载的库),则可以使用loadfile
:将require "table"
更改为loadfile "./table.lua" ()
(其中./table.lua
应该是文件的完整(相对较好)路径。)