通过相对路径加载Lua文件

前端之家收集整理的这篇文章主要介绍了通过相对路径加载Lua文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有这样的文件结构:
./main.lua
./mylib/mylib.lua
./mylib/mylib-utils.lua
./mylib/mylib-helpers.lua
./mylib/mylib-other-stuff.lua

从main.lua文件mylib.lua可以加载完整路径require(‘mylib.mylib’)。但是在mylib.lua里面,我也想加载其他必要的模块,我不觉得总是指定完整路径(例如mylib.mylib-utils)。如果我决定移动文件夹,我将有大量的搜索和替换。有没有办法只使用路径的相对部分?

UPD)。我正在使用Lua与Corona SDK,如果重要。

解决方法

有一种推断文件的“本地路径”的方法(更具体地说,是用于加载文件的字符串)。

如果您需要lib.foo.bar中的文件,您可能会这样做:

require 'lib.foo.bar'

然后,当您处于所有功能之外时,您可以获取文件的路径作为第一个元素(而且仅)…变量。换一种说法:

-- lib/foo/bar.lua
local pathOfThisFile = ... -- pathOfThisFile is now 'lib.foo.bar'

现在,要获取文件夹”,您需要删除文件名。最简单的方法是使用匹配:

local folderOfThisFile = (...):match("(.-)[^%.]+$") -- returns 'lib.foo.'

在那里你有它现在,您可以将该字符串添加到其他文件名,并使用它来要求:

require(folderOfThisFile .. 'baz')     -- require('lib.foo.baz')
require(folderOfThisFile .. 'bazinga') -- require('lib.foo.bazinga')

如果您移动bar.lua,folderOfThisFile将自动更新。

猜你在找的Lua相关文章