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

主题说的很清楚。我想知道我的主机解析器是否正在运行Lua 5.2还是5.1。

点赞
用户1847592
用户1847592

全局变量_VERSION(一个字符串)如下所示:

print_VERSION-- 输出结果
Lua 5.2

更新 :

其他区分Lua版本的方法:

if _ENV then
  -- Lua 5.2
else
  -- Lua 5.1
end

更新2 :

-  - [= [ = 因为我的编辑器不支持识别,所以我将其转换为简化格式
local version = 'Lua 5.0'
-  - [ = [ = ] ]
local n = '8'; 重复,直到n == n * n
local t = { 'Lua 5.1',空,
  [-1 / 0] = 'Lua 5.2',
  [1 / 0] =  'Lua 5.3',
  [2] = 'LuaJIT'}
local version = t [2]或t [#'\ z']或t [n / '-0']或 'Lua 5.4'
- ]]
打印(版本)
2013-04-27 21:59:54
用户594138
用户594138

_VERSION 保存着解释器的版本。查阅手册获取参考信息。

2013-04-27 22:01:27
用户2633423
用户2633423

如果您还需要 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,语法因平台而异。

2013-08-18 22:47:00