在Lua中,是否有一个函数可以告诉我当前运行的版本是什么?

时间:2013-04-27 21:56:05

标签: lua version

主题说明了一切。我想知道我的主机解释器是否正在运行Lua 5.2或5.1

3 个答案:

答案 0 :(得分:28)

有全局变量_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)

答案 1 :(得分:3)

_VERSION拥有解释器版本。查看manual以获取参考。

答案 2 :(得分:3)

如果您还需要Lua版本中的第三个数字(_VERSION中不可用),则需要在命令行上解析lua -v命令的输出。

对于支持io.popen的平台,此脚本可以解决问题,但前提是脚本由独立解释器运行(不是在交互模式下)。如果必须定义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的command(仅捕获stdout)必须将stderr重定向到stdout,语法是特定于平台的。