Dokumentace CLua


📂 Include & Import (C# ↔ Lua)

Tyto dva mechanismy umožňují modulární a přehledné strukturování Lua kódu v CLua.


🔧 include("cesta"[, ...])

Načte jeden nebo více Lua souborů a okamžitě je spustí v aktuálním prostředí.

include("utils/test");                     -- načte a spustí utils/test.lua
include("utils/test", "menu/main");        -- načte utils/test.lua, poté menu/main.lua

Vlastnosti:

  • Načtený kód vidí a může ovlivnit proměnné aktuálního prostředí
  • Podporuje nepovinnou tabulku jako poslední parametr pro cílení na konkrétní prostředí
include("utils/constants", _ENV) -- vynutí vložení do určeného prostředí

Pozn: _ENV je aktuální prostředí — na nejvyšší úrovni _G, uvnitř import modulů je to prostředí daného modulu.

  • Při použití uvnitř import modulu se include správně načte do vlastního prostředí modulu.

⚠️ tryInclude("cesta"[, ...])

Funkčně stejné jako include, ale pokud soubor neexistuje, nevypíše chybu a prostě ho ignoruje.

tryInclude("utils/optional_config") -- pokud neexistuje, nic se nestane

🧩 import("soubor"[, fallbackEnv])

Načte Lua soubor jako modul běžící ve vlastním izolovaném prostředí. Prostředí modulu je vráceno jako tabulka.

local mymod = import("utils/mujmodul")
mymod.něco()

Volitelný druhý parametr:

Hodnota Chování
Nezadáno __index modulu je nastaveno na aktuální prostředí (volající _ENV)
Tabulka (table) Tabulka je použita jako fallback __index
Neplatná hodnota (false, number atd.) __index je nastaveno na základní prostředí CLua (okleštěné built-in funkce + registrované C# funkce)

Vlastnosti:

  • Nepřepisuje globální prostor
  • Modul nevidí lokální proměnné volajícího
  • Všechny local funkce a proměnné deklarované v modulu jsou dostupné ve vrácené tabulce
  • Modul může být napojen na jiný modul nebo vlastní prostředí přes druhý parametr

Poznámka k logu:

  • Importované moduly se v logu vypisují po (tedy nad) skriptu, který je importoval

📌 Shrnutí

Funkce Scope Vidí prostředí Přepisuje globální?
include sdílený (volající) ✅ Ano ✅ Ano (pokud není local)
tryInclude sdílený (volající) ✅ Ano ✅ Ano (pokud není local)
import izolovaný (_ENV) ✅ Přes fallback ❌ Ne

✍️ Příklady

Načtení sekcí modulu do prostředí modulu

local menu = import("window/menu");
include("menuSec2", "menuSec4", "menuSec3", menu);
-- menuSec*.lua se načtou do prostředí modulu 'menu'

Import s vlastním fallback prostředím

local fallback = { shared = true }
local mod = import("module", fallback)
print(mod.shared) -- vypíše: true

Import bez fallbacku (čisté izolované prostředí)

local mod = import("module", false)
-- mod nemá přístup k žádným globálním proměnným