如果脚本被称为“table.lua”,Lua需要输入错误?

时间:2017-10-03 18:04:05

标签: lua reserved-words

尝试复制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。

感谢所有提示。

1 个答案:

答案 0 :(得分:3)

标准库mathiostring,...和table是在Lua解释器中预定义(和预加载)的。因为需要按名称缓存模块,所以require "table"将返回标准table库,而不是从文件中加载您自己的table模块。

解决问题的一个好方法是创建一个文件夹并将库文件放在那里。如果文件夹名为mylib,则require "mylib.table"将起作用并加载文件。

或者,如果您只需要加载文件一次而不需要require的功能(在多个目录中搜索文件,缓存加载的库),则可以使用loadfile:将require "table"更改为loadfile "./table.lua" ()(其中./table.lua应该是文件的完整(相对较好)路径。)