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