Ответ 1
Lua по умолчанию не имеет "родного" способа поддержки концепции "текущего каталога" или, по сути, понятия "каталог".
Правильный способ получить текущий каталог - это библиотека, поддерживающая поддержку папки. Есть несколько - я рекомендую luafilesystem.
Как только он будет установлен, вы можете получить текущий каталог, выполнив:
lfs.currentdir()
Это будет работать с окнами, linux и mac.
Остерегайтесь того, что эти внешние библиотеки обычно включают некоторые бинарные пакеты. В зависимости от вашей настройки, возможно, вам придется скомпилировать ее, прежде чем использовать ее.
EDIT:
Обратите внимание, что когда файл включается через require
, выражение {...}[1]
возвращает путь, используемый директивой require
. Это не совсем путь, потому что:
- Он использует точки для разделения каталогов и подавляет
.lua
в конце файла. - Относительно пути, из которого инициализирован процесс lua
- Это зависит от конфигурации
package.path
Но если все, что вам нужно, это "требуемый путь" файла (возможно, для того, чтобы требовать файлы рядом с ним), вы можете получить его, выполнив это в самом начале файла:
local PATH = (...):match("(.+)%.[^%.]+$") or (...)
Если с require 'foo.bar.baz'
требуется файл с именем baz.lua
, то PATH
будет foo.bar
.