Существует способ определения «локального пути» файла (точнее, строки, которая использовалась для загрузки файла).
Если вам требуется файл внутри 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
автоматически обновится.