Индексация с 1! Работает везде: таблицы, строки, подстроки.
x = 10 -- глобальная local y = 20 -- локальная (быстрее, не выходит за пределы блока) -- Имена: буквы, цифры, _ . Нельзя начинать с цифры. -- nil = "пусто"
| Тип | Пример |
|---|---|
| nil | a = nil |
| boolean | true, false |
| number | 42, 3.14, -7 |
| string | «привет», «ok» |
| table | {1,2,3} |
| function | function() end |
print(type(x)) -- узнать тип
print("текст") -- с переводом строки io.write("текст") -- без перевода s = io.read() -- читаем строку n = tonumber(io.read()) -- читаем число
if x > 5 then print(">5") elseif x == 5 then print("=5") else print("<5") end -- Операторы сравнения: == ~= < > <= >= -- Логические: and or not -- Короткая запись (тернарник) result = (age >= 18) and "взрослый" or "ребенок"
-- while while count < 10 do count = count + 1 end -- for (переменная = начало, конец, шаг) for i = 1, 10 do -- 1 2 3 4 5 6 7 8 9 10 for i = 1, 10, 2 do -- 1 3 5 7 9 for i = 10, 1, -1 do -- 10 9 8 ... 1 -- repeat-until (хоть один раз выполнится) repeat x = x - 1 until x == 0 -- break - выход из цикла
arr = {"a", "b", "c"} print(arr[1]) --> a print(#arr) --> 3 (длина) -- Добавление/удаление arr[4] = "d" table.insert(arr, "e") -- в конец table.insert(arr, 2, "x") -- на позицию 2 table.remove(arr, 2) -- удалить позицию 2 -- Перебор массива for i, v in ipairs(arr) do print(i, v) end
dict = {name="Иван", age=30, city="Москва"} print(dict.name) --> Иван print(dict["age"]) --> 30 -- Добавление dict.job = "программист" -- Перебор словаря for k, v in pairs(dict) do print(k .. " = " .. v) end
-- Проверка существования ключа if dict.salary then print("есть") end -- Значение по умолчанию name = dict.name or "Гость" -- Очистка таблицы for k in pairs(t) do t[k] = nil end
-- Объявление function add(a, b) return a + b end -- Локальная функция local function mul(a, b) return a * b end -- Анонимная функция square = function(x) return x * x end -- Несколько возвращаемых значений function get_min_max(t) local min, max = t[1], t[1] for i = 1, #t do if t[i] < min then min = t[i] end if t[i] > max then max = t[i] end end return min, max end a, b = get_min_max({3,1,4,1,5}) -- a=1, b=5 -- Вызов result = add(5, 3) --> 8
s = "hello" s2 = 'world' s3 = [[много строк]] -- Основные операции print(#s) --> 5 print(s .. " " .. s2) --> hello world print(string.upper(s)) --> HELLO print(string.lower(s)) --> hello print(string.sub(s, 2, 4)) --> ell (индексы с 1!) print(string.rep("hi", 3)) --> hihihi print(string.find(s, "ell")) --> 2 (позиция) -- Поиск и замена new = string.gsub("hello world", "world", "lua") --> hello lua -- Экранирование: \n \t \\ \" \'
-- Случайные числа math.randomseed(os.time()) -- инициализация r = math.random() -- 0..1 r = math.random(100) -- 1..100 r = math.random(10, 20) -- 10..20 -- Округление math.floor(3.7) --> 3 math.ceil(3.2) --> 4 -- Минимум/максимум math.min(3,1,4,1,5) --> 1 math.max(3,1,4,1,5) --> 5 -- Другое math.abs(-5) --> 5 math.sqrt(9) --> 3 math.pi --> 3.1415926535898
Категория Операторы | Арифметика | ''+'' ''-'' ''*'' ''/'' ''//'' ''%'' ''^'' ''-''(унарный) | Сравнение | ''=='' ''~='' ''<'' ''>'' ''<='' ''>='' | Логика | ''and'' ''or'' ''not'' | Конкатенация | ''..'' | Длина | ''#'' | Присваивание | ''=''
name = name or "Гость"
a, b = b, a
if not x then print("x = nil или false") end if x == nil then print("только nil") end
if x > 0 then print("positive") end
-- В начале файла setfenv(1, {}) -- изолирует (Lua 5.1) -- Или используйте 'local' везде
function print_table(t, name) name = name or "table" print(name .. ":") for k, v in pairs(t) do print(" " .. tostring(k) .. " = " .. tostring(v)) end end
= присваивание, == сравнениеthen и endif x == nil работает, но if not x короче-- однострочный --[[ многострочный комментарий --]]
lua script.lua # запустить скрипт lua -i script.lua # запустить с интерактивным режимом lua -e "print('hi')" # выполнить строку кода
#!/usr/bin/env lua -- -*- coding: utf-8 -*- local function main() print("Начало работы") -- ваш код здесь print("Завершено") return 0 end if type(package) ~= "table" or package.loaded[...] ~= true then os.exit(main()) end
Antistatus 15.04.2026 08:45