Lua 如果调用脚本需要错误 "table.lua"?

Lua require error if script is called "table.lua"?

尝试复制this simple Lua example(使用second post中的改进代码),我遇到了以下奇怪的问题:

我逐字复制了代码,但恰好调用了第一个文件“table.lua”(而不是“funcs.lua"). 第二个文件在示例中被称为“main.lua”。

在我的例子中,无论我尝试什么,我总是得到流行的错误消息 "attempt to call field 'myfunc' (a nil value)"(好像 require 语句被忽略了;但路径等都是有序的)。

经过两个小时的尝试和搜索信息,我或多或少地预感将第一个文件从“table.lua”重命名为“[=29=” ]tabble.lua",然后一切都按预期迅速工作。重命名为例如“tables.lua”也可以。

作为 Lua 的新手,我仍然想了解到底出了什么问题。最初我认为原因可能是“table”是一个保留字Lua,但我检查的所有参考资料都没有这样列出。

那么这是怎么回事?

我正在使用 LuaForWindows v5.1.4-46 和随附的 SciTE editor/IDE (v.1.75)。

感谢所有提示。

标准库 mathiostring、…和 table 已预定义(并预加载)在 [=31= 】 翻译。因为需要按名称缓存模块,所以说 require "table" 将 return 标准 table 库,而不是从文件加载您自己的 table 模块。

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

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