Il soggetto dice tutto. Vorrei sapere se il mio interprete host è in esecuzione Lua 5.2 o 5.1In Lua, c'è una funzione che mi dirà quale versione corrente sto correndo?
risposta
C'è _VERSION variabile globale (una stringa):
print(_VERSION)
-- Output
Lua 5.2
UPD:
Altri metodi per distinguere tra Versioni 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
_VERSION
contiene la versione dell'interprete. Controllare lo manual come riferimento.
Se è necessaria anche la terza cifra nella versione Lua (non disponibile in _VERSION
) è necessario analizzare l'output del comando lua -v
sulla riga di comando.
Per le piattaforme che supportano io.popen questo script farà il trucco, ma solo se lo script viene eseguito dall'interprete standalone (non in modalità interattiva) .IOW la tabella globale arg
deve essere definito:
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)')
noti che lua -v
scrive su stderr
su Windows (per Linux non so), in modo che il command
per io.popen (che cattura solo stdout
) deve reindirizzare stderr
al stdout
e la sintassi è specifico per la piattaforma.
La terza cifra identifica diversi bug- correzione delle versioni senza modifica delle funzionalità. Sembra inutile metterli alla prova. – lhf
@lhf in generale sono pienamente d'accordo, ma per esigenze particolari è un trucco utile da sapere. Per esempio. dì che vuoi scoprire se il tuo script è eseguito da un interprete a cui è applicata una determinata patch o è più vecchio (forse devi eseguire lo script su un sistema non sotto il tuo controllo, quindi non sai se una soluzione alternativa il codice deve essere usato o meno). Ma ammetto che è un po 'da parte del nitpicker :-) –
Su Linux "lua -v'" scrive su 'stdout' con Lua 5.2 ma su' stderr' con Lua 5.1, ma poiché la sintassi per il reindirizzamento è lo stesso nella shell (Bourne), è possibile utilizzare la stessa stringa di comando su Linux e Windows (e quasi certamente anche su OS X). –
Ah ... c'è una variabile globale chiamata _VERSION: – henryaz