2013-04-27 6 views

risposta

20

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 
+1

Attenzione - '_ENV' può essere intenzionalmente impostato su' nil'. – finnw

+3

@finnw - Anche 'math.pi' può essere intenzionalmente impostato a' 3' :-) –

+0

Penso che intendessimo 'Lua 5.2 o maggiore', dato che' Lua 5.3' ha anche la variabile globale '_ENV'. – JeromeJ

3

_VERSION contiene la versione dell'interprete. Controllare lo manual come riferimento.

2

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.

+0

La terza cifra identifica diversi bug- correzione delle versioni senza modifica delle funzionalità. Sembra inutile metterli alla prova. – lhf

+0

@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 :-) –

+0

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). –