对象说明了一切。我想知道我的主机解释器运行的是 Lua 5.2 还是 5.1
问问题
19120 次
3 回答
31
有全局变量_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)
于 2013-04-27T21:59:54.593 回答
3
如果您还需要 Lua 版本中的第三位数字(在 中不可用_VERSION
),则需要lua -v
在命令行上解析 command 的输出。
对于支持 io.popen 的平台,这个脚本可以解决问题,但前提是脚本由独立解释器运行(不是在交互模式下)。IOWarg
必须定义全局表:
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)' )
请注意,在 Windows 上lua -v
写入stderr
(对于 Linux 我不知道),因此command
for io.popen (仅捕获stdout
)必须重定向stderr
到stdout
并且语法是特定于平台的。
于 2013-08-18T22:47:00.913 回答
3
_VERSION
保存解释器版本。检查手册以供参考。
于 2013-04-27T22:01:27.757 回答