При загрузке скрипта как модуля, в него первым аргументом передаётся название модуля. Функция loadfile загружает файл в виде метода, который можно выполнить с аргументами. Функция dofile автоматически исполняет файл без аргументов. Таким способом можно отличить метод загрузки.
Код |
---|
require ( 'test' ) ( 'require' )
loadfile ( 'test.lua' )( 'foo' )( 'loadfile' )dofile ( 'test.lua' ) ( 'dofile' )
|
test.lua
Код |
---|
local args = { ... or 'no arguments' }
for k, v in pairs ( args ) do print ( k, v ) end
return function ( s ) print ( s ) end |
вывод:
Код |
---|
1 test
require
1 foo
loadfile
1 no arguments
dofile
|
Всегда загружайте скрипты как модули, то есть с помощью функции require. Это исключает повторное исполнение кода в файле и перезапись измененных значений на исходные. Обратите внимание, что require не принимает путь к файлу, а только название модуля. Точка и расширение файла не указываются (можно таже загрузить совместимые .dll и .so) и если модуль расположен внутри папки, то разделителем нужно использовать точку а не слэш.
Код |
---|
--/module/interpreted.lua
--/module/HWaccelerated.dll
require ( 'module.interpreted' )
require ( 'module.HWaccelerated' )
|