Arhn - архитектура программирования

Есть ли в Lua функция, которая скажет мне, какую текущую версию я использую?

Тема говорит обо всем. Я хотел бы знать, работает ли мой хост-интерпретатор Lua 5.2 или 5.1.

27.04.2013

  • Ах... есть глобальная переменная с именем _VERSION: 28.04.2013
  • World of Warcraft (8.2 Битва за Азерот): 5.1 10.07.2019

Ответы:


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)
27.04.2013
  • Будьте осторожны - _ENV может быть намеренно установлено на nil. 28.04.2013
  • @finnw - Даже math.pi можно намеренно установить на 3 :-) 28.04.2013
  • Я думаю, вы имели в виду Lua 5.2 or greater, поскольку Lua 5.3 также имеет глобальную переменную _ENV. 17.01.2016
  • @JeromeJ - Да, конечно. Lua 5.3 не существовало в 2013 году. 17.01.2016
  • Подробнее об определении версии Lua 26.09.2016
  • Я думаю, что 9^33 == 27^22 верно даже для LuaJit (по крайней мере, для LuaJit 2.0.4). 29.06.2018
  • @Royi - результат зависит от того, используется ли для расчета 64-битный двойной (LuaJIT) или 80-битный расширенный (ванильный Lua). 30.06.2018
  • Я только что попробовал это на последней версии Zero Brane Studio, которая использует LuaJit 2.0.4. Получается: 9^33 == 27^22 true print(jit.version) LuaJIT 2.0.4. Я следил за stackoverflow.com/questions/20335340. 30.06.2018
  • Еще одна сумасшедшая проверка: if 0x123456789 == 0x987654321 then --Lua 5.1 12.07.2018
  • Теперь с поддержкой Lua 5.4 25.07.2020

  • 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 записывает stderr в Windows (для Linux я не знаю), поэтому command для io.popen (который захватывает только stdout) должен перенаправлять stderr в stdout, а синтаксис зависит от платформы.

    18.08.2013
  • Третья цифра обозначает различные версии с исправлением ошибок без изменения функциональности. Тестировать их бессмысленно. 19.08.2013
  • @lhf в целом я полностью согласен, но для особых нужд это полезно знать. Например. скажем, вы хотите узнать, запускается ли ваш сценарий интерпретатором, к которому применен определенный патч, или он является более старым (возможно, вы должны запускать сценарий в системе, не находящейся под вашим контролем, поэтому вы не знаете, есть ли обходной путь в код должен быть использован или нет). Но я признаю, что это немного на стороне придирки :-) 19.08.2013
  • В Linux 'lua -v' записывает в stdout с Lua 5.2, но в stderr с Lua 5.1, но поскольку синтаксис перенаправления одинаков в оболочке (Bourne), вы можете использовать одну и ту же командную строку в Linux и Windows (и почти наверняка на OS X тоже). 27.09.2014

  • 3

    _VERSION содержит версию интерпретатора. См. руководство для справки.

    27.04.2013
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..