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ř
importmodulu seincludesprá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
localfunkce 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