LuLua · Lesson 8 of 8
Lua Cheatsheet
The whole language on one page — it fits.
Lua
-- ── Basics ──────────────────────────────
local x = 42 -- ALWAYS use local
local name = "Ada"
local ok = true
local nothing = nil
print("Hi " .. name) -- .. concatenates
print(#name) -- # = length
print(10 // 3, 10 % 3, 2 ^ 8) -- floor div, mod, power
-- ── Control flow ────────────────────────
if x > 10 then
print("big")
elseif x > 5 then
print("medium")
else
print("small")
end
-- ~= is NOT EQUAL. and / or / not.
-- only nil and false are falsy (0 is truthy!)
local v = maybe or "default" -- idiom
for i = 1, 5 do print(i) end -- INCLUSIVE both ends
for i = 10, 1, -1 do end -- step
while x > 0 do x = x - 1 end -- no x-- or x -= 1
repeat x = x + 1 until x == 5
-- ── Functions ───────────────────────────
local function divide(a, b)
if b == 0 then return nil, "div by zero" end
return a / b -- multiple returns
end
local result, err = divide(10, 2)
local double = function (n) return n * 2 end
local function sum(...) return select("#", ...) endLua
-- ── Tables (the only data structure) ────
local list = { "a", "b", "c" } -- array: 1-INDEXED
list[1] -- "a"
#list -- 3
table.insert(list, "d") -- append
table.remove(list, 1)
table.sort(list)
table.concat(list, ", ")
local map = { name = "Ada", age = 17 }
map.name; map["name"] -- same
map.email = "a@b.c" -- add
map.age = nil -- delete
for i, v in ipairs(list) do end -- arrays (stops at nil)
for k, v in pairs(map) do end -- everything, any order
-- ── Strings ─────────────────────────────
s:upper(); s:lower(); s:sub(1, 5); s:rep(2)
s:find("pat"); s:gsub("old", "new")
string.format("%s: %.2f", name, 3.14159)
for w in s:gmatch("%a+") do end -- iterate words
-- patterns: %d digit %a letter %s space %w alnum + * -
-- ── OOP pattern ─────────────────────────
local Dog = {}
Dog.__index = Dog
function Dog.new(name)
return setmetatable({ name = name }, Dog)
end
function Dog:bark() -- colon = implicit self
return self.name .. " woofs"
end
local rex = Dog.new("Rex")
rex:bark()
-- ── Stdlib highlights ───────────────────
math.floor(3.7); math.max(1, 5); math.random(1, 6)
os.time(); os.date("%Y-%m-%d")
local f = io.open("f.txt", "r")
local text = f:read("a"); f:close()
pcall(risky) -- protected call (try/catch)