Sistemul de Module în Lua: require, package.path și Încărcare Modulară în Lua

Ghid complet pentru module în Lua: organizarea codului pe fișiere, funcția require(), izolarea variabilelor locale și configurarea căilor de căutare package.path.

Sintaxă
local modul = require("nume_modul"); return M

În Lua modern (Lua 5.2+ și 5.4), un modul este pur și simplu un fișier de cod care returnează o tabelă conținând funcțiile și constantele publice. Funcția require() încarcă modulul, rulează codul o singură dată și salvează rezultatul în memoria cache (package.loaded), astfel încât apelurile ulterioare returnează aceeași referință fără costuri de disc.

Crearea și consumarea unui modul matematic curat
-- Fișier: matematica.lua (Modulul):
local M = {} -- tabela exportată

-- Variabilă internă privată (neinclusă în M, invizibilă din exterior):
local PI_PRECIS = 3.141592653589793

function M.calculeazaArieCerc(raza)
    return PI_PRECIS * raza * raza
end

function M.calculeazaPerimetruCerc(raza)
    return 2 * PI_PRECIS * raza
end

return M -- returnăm tabela de API

----------------------------------------------------
-- Fișier: main.lua (Consumatorul):
local matematica = require("matematica")

local arie = matematica.calculeazaArieCerc(10)
print(string.format("Aria cercului cu raza 10 este: %.2f", arie))