如何使用.lua导航到上层目录

我有类似于这样的内容。

/config.lua
/client/init.lua

如何使用include()dofile()包含config.lua?Lg

点赞
用户828255
用户828255

使用 dofile 是正确的方法。(然而,Lua 中没有 include 函数。) 您可能已经注意到,require 不能这样做:

local cfg = require'../config'

require 通常从初始脚本的目录开始单向工作,而需要其自己的模块的所有必需模块必须使用相对于该起始点的名称才能正常工作。

也就是说,如果你有以下结构:

--+ main.lua          requires 'lib.test1'
  +-- lib/test1.lua   requires 'test2'
  +-- lib/test2.lua

test1.lua无法要求 test2,因为它无法从初始目录中找到。正确的模块名称在这里是 lib.test2。我不确定是否有任何好的模式可以解决这个问题,除了编写自己的有状态 require,但了解这一点对于编写库代码很有帮助。

也许这是一个不好的征兆。


回到问题,你可以在 package.loaded 中为你的 config 文件设置一个例外。这实际上是手动加载它:

package.loaded.config = dofile'../config.lua'
-- ...
local cfg = require'config'
2013-12-17 20:39:41
用户1516484
用户1516484

你可以使用require,通过将../?.lua添加到package.path中来实现(可能应该这样做),如下所示:

package.path = package.path .. ";../?.lua"
require "config"

有关更多信息,请参见requirepackage.path文档。

2013-12-17 22:11:05