在Lua中,是否有一个函数可以告诉我当前版本I';我在跑步?

在Lua中,是否有一个函数可以告诉我当前版本I';我在跑步?,lua,version,Lua,Version,主题说明了一切。我想知道我的主机解释器是否运行Lua5.2或5.1,是否有全局变量版本(字符串): 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] =

主题说明了一切。我想知道我的主机解释器是否运行Lua5.2或5.1,是否有全局变量版本(字符串):


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)

\u VERSION
保存解释器版本。检查以获取参考。

如果您还需要Lua版本中的第三位数字(在
\u 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
)必须将
stderr
重定向到
stdout
,语法是特定于平台的。。。有一个全局变量叫做_VERSION:World of Warcraft(8.2 Battle for Azeroth):
5.1
小心--
\u ENV
可以故意设置为
nil
@finnw-偶数
math。pi
可以故意设置为
3
:-)我想你是指
Lua 5.2或更高的
,as
Lua5.3
还有
\u ENV
全局变量。@JeromeJ-当然有。Lua 5.3在2013年不存在。关于检测Lua版本第三位数字标识不同的bug fix版本,功能不变。测试这些似乎是毫无意义的。@lhf大体上我完全同意,但对于特殊需要,了解它是一个有用的技巧。例如,假设您希望发现您的脚本是由应用了特定补丁的解释器运行的,还是由较旧的解释器运行的(可能您必须在不受您控制的系统上运行脚本,因此您不知道是否必须使用代码中的变通方法)。但我承认这有点吹毛求疵:-)在Linux上,
lua-v
“使用Lua5.2写入
stdout
,但使用Lua5.1写入
stderr
,但由于重定向的语法在(Bourne)shell中是相同的,因此在Linux和Windows上可以使用相同的命令字符串(几乎可以肯定在OSX上也是如此)。
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)' )