require只认文件名,不认路径名。要加入路径名信息的话,就要写成父模块子模块的形式。
比如说,我有两个文件夹 testa, testb,在每个文件夹里面都有一个run.lua文件。我先在lua里面chdir进到testa里面去require了一下run.lua,然后再chdir出来,再chdir进testb,然后,再执行require "run"。 这个时候,Lua是默认不会把第二个文件夹中的run.lua给加载进来的,因为Lua会对加载进来的所有模块有一个按名字的管理系统,记录在 package.loaded 里面。如果要强制加载新的run.lua文件,就得把老的模块记录给清掉,即使用 package.loaded["run"] = nil,然后再加载。 实际上,Lua这样设计的目的是为了防止对模块的重复加载──这样可以解决开发过程中经常遇到的重复包含的问题,还可解决递归包含的问题。我们通常在C语言的头文件中写上#ifdef #define #endif之类的结构,也是为了实现这种效果。 任何设计都不是万能的,需要开发者根据实际情况灵活变通。 |
|