В Lua есть функция, которая скажет мне, в какой текущей версии я запускаю?
Тема говорит все. Я хотел бы знать, работает ли мой интерпретатор хоста Lua 5.2 или 5.1
Ответы
Ответ 1
Существует глобальная переменная _VERSION (строка):
print(_VERSION)
-- Output
Lua 5.2
UPD:
Другие методы для различения версий Lua:
if _ENV then
-- Lua 5.2
else
-- Lua 5.1
end
if 9^33 == 27^22 then -- this check is valid for x86/x64 only
-- vanilla Lua
else
-- LuaJIT
end
Ответ 2
_VERSION
содержит версию интерпретатора. Проверьте manual для справки.
Ответ 3
Если вам нужна третья цифра в версии Lua (недоступна в _VERSION
), вам нужно проанализировать вывод команды lua -v
в командной строке.
Для платформ, поддерживающих io.popen, этот script выполнит трюк, но только если script запускается автономным интерпретатором (не в интерактивном режиме). IOW должна быть определена глобальная таблица arg
:
local i_min = 0
while arg[ i_min ] do i_min = i_min - 1 end
local lua_exe = arg[ i_min + 1 ]
local command = lua_exe .. [[ -v 2>&1]] -- Windows-specific
local fh = assert( io.popen( command ) )
local version = fh:read '*a'
fh:close()
-- use version in the code below
print( version )
print( version:match '(%d%.%d%.%d)' )
Обратите внимание, что lua -v
записывает на stderr
в Windows (для Linux я не знаю), поэтому command
для io.popen(который только фиксирует stdout
) должен перенаправить stderr
в stdout
и синтаксис является специфичным для платформы.