【问题标题】:In Lua, is there a function that will tell me what current version I'm running?在 Lua 中,是否有一个函数可以告诉我正在运行的当前版本是什么?
【发布时间】:2013-04-21 20:33:49
【问题描述】:

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

【问题讨论】:

  • 啊……有一个全局变量叫_VERSION:
  • 魔兽世界(8.2争霸艾泽拉斯):5.1

标签: lua version


【解决方案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
  • @finnw - 即使math.pi 也可以有意设置为3 :-)
  • 我想你的意思是Lua 5.2 or greater,因为Lua 5.3 也有_ENV 全局变量。
  • @JeromeJ - 是的,当然。 Lua 5.3 在 2013 年还不存在。
  • More关于检测Lua版本
【解决方案2】:

如果你还需要 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 @ 并且语法是特定于平台的。

【讨论】:

  • 第三位数字标识不同的错误修复版本,功能没有变化。测试这些似乎毫无意义。
  • @lhf 总的来说我完全同意,但对于特殊需要,这是一个有用的技巧。例如。假设您想发现您的脚本是由应用了特定补丁的解释器运行的,还是由较旧的解释器运行的(也许您必须在不受您控制的系统上运行脚本,所以您不知道是否有解决方法代码必须使用或不使用)。但我承认这有点吹毛求疵 :-)
  • 在 Linux 'lua -v' 上,使用 Lua 5.2 写入 stdout,但使用 Lua 5.1 写入 stderr,但由于重定向的语法在 (Bourne) shell 中是相同的,因此您可以在 Linux 和 Windows 上使用相同的命令字符串(几乎可以肯定在 OS X 上也是如此)。
【解决方案3】:

_VERSION 保存解释器版本。请查看manual 以供参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2021-03-28
    • 2014-02-03
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2017-07-27
    相关资源
    最近更新 更多