【发布时间】:2013-04-21 20:33:49
【问题描述】:
主题说明了一切。我想知道我的主机解释器运行的是 Lua 5.2 还是 5.1
【问题讨论】:
-
啊……有一个全局变量叫_VERSION:
-
魔兽世界(8.2争霸艾泽拉斯):
5.1
主题说明了一切。我想知道我的主机解释器运行的是 Lua 5.2 还是 5.1
【问题讨论】:
5.1
有全局变量_VERSION(一个字符串):
print(_VERSION)
-- Output
Lua 5.2
UPD:
其他区分 Lua 版本的方法:
if _ENV then
-- Lua 5.2
else
-- Lua 5.1
end
UPD2:
--[=[
local version = 'Lua 5.0'
--[[]=]
local n = '8'; repeat n = n*n until n == n*n
local t = {'Lua 5.1', nil,
[-1/0] = 'Lua 5.2',
[1/0] = 'Lua 5.3',
[2] = 'LuaJIT'}
local version = t[2] or t[#'\z'] or t[n/'-0'] or 'Lua 5.4'
--]]
print(version)
【讨论】:
_ENV 可以有意设置为 nil。
math.pi 也可以有意设置为3 :-)
Lua 5.2 or greater,因为Lua 5.3 也有_ENV 全局变量。
如果你还需要 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 在 Windows 上写入 stderr(对于 Linux,我不知道),因此 io.popen(仅捕获 stdout)的 command 必须将 stderr 重定向到 @987654330 @ 并且语法是特定于平台的。
【讨论】:
lua -v' 上,使用 Lua 5.2 写入 stdout,但使用 Lua 5.1 写入 stderr,但由于重定向的语法在 (Bourne) shell 中是相同的,因此您可以在 Linux 和 Windows 上使用相同的命令字符串(几乎可以肯定在 OS X 上也是如此)。
_VERSION 保存解释器版本。请查看manual 以供参考。
【讨论】: