2013-04-27 74 views

回答

20

有全局變量_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 
+1

小心 - '_ENV'可以有意設置爲'nil'。 – finnw 2013-04-28 00:02:51

+3

@finnw - 即使'math.pi'可以有意設置爲'3' :-) – 2013-04-28 06:19:29

+0

我認爲你的意思是'Lua 5.2或更高版本',因爲'Lua 5.3'也有'_ENV'全局變量。 – JeromeJ 2016-01-17 04:22:18

3

_VERSION包含解釋器版本。檢查manual以供參考。

2

如果您還需要Lua版本中的第三個數字(在_VERSION中不可用),則需要在命令行上解析命令lua -v的輸出。

對於支持io.popen這個腳本會做的伎倆平臺,但前提是腳本由獨立的解釋(不是在交互模式).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)必須重定向到stderrstdout的語法是特定於平臺。

+0

第三位數字表示不同的bug-修復版本而不改變功能。測試這些似乎毫無意義。 – lhf 2013-08-19 00:32:18

+0

@lhf在一般情況下,我完全同意,但對於特殊需要,這是一個有用的技巧。例如。假設你想要發現你的腳本是由一個應用了特定補丁的解釋程序運行的,還是一個較舊的腳本(也許你必須在一個不受你控制的系統上運行腳本,所以你不知道在該代碼必須使用或不)。但我承認它在nitpicker方面有點:-) – 2013-08-19 00:43:01

+0

在Linux上''lua -v''使用Lua 5.2寫入'stdout',但使用Lua 5.1寫入'stderr',但由於重定向的語法是在(Bourne)shell中相同,您可以在Linux和Windows上使用相同的命令字符串(並且幾乎可以肯定在OS X上)。 – 2014-09-27 14:33:45

相關問題