Подтвердить что ты не робот

В Lua есть функция, которая скажет мне, в какой текущей версии я запускаю?

Тема говорит все. Я хотел бы знать, работает ли мой интерпретатор хоста Lua 5.2 или 5.1

4b9b3361

Ответ 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 и синтаксис является специфичным для платформы.