Когда компилируется lua, он настраивается немного по-разному в зависимости от операционной системы, для которой он компилируется.
Таким образом, многие из строк, которые установлены в модуле 'package', могут использоваться для определения, для какой системы он был скомпилирован.
Например, когда lua загружает модули на основе C, которые распространяются как динамические библиотеки, он должен знать расширение, используемое для этих библиотек, которое отличается в каждой ОС.
Таким образом, вы можете использовать следующую функцию для определения ОС.
local BinaryFormat = package.cpath:match("%p[\\|/]?%p(%a+)")
if BinaryFormat == "dll" then
function os.name()
return "Windows"
end
elseif BinaryFormat == "so" then
function os.name()
return "Linux"
end
elseif BinaryFormat == "dylib" then
function os.name()
return "MacOS"
end
end
BinaryFormat = nil