Reload Básico
Nesta página
Cada demo neste capítulo é um sub-projeto com seu próprio main.zolo e módulos
separados. Para executar, abra o diretório no terminal e rode zolo dev:
cd examples/features/21-hot-reload/01-basic-reload
zolo dev main.zolo
O ponto de entrada importa duas funções do módulo greeter e entra num loop
de leitura interativo. O segredo está em como use greeter::{greet, farewell}
é compilado: cada chamada passa por um live-binding thunk que re-resolve a
função na tabela de exportações do módulo — não guarda um ponteiro fixo.
Ponto de entrada: loop de ENTER + importação via live-binding.
// Feature: basic hot-reload
// Syntax: `zolo dev main.zolo` + edits to the `greeter` module.
// When to use: the "hello world" of `zolo dev` — edit-save-call flow.
//
// Press ENTER to call greet again. Edit greeter.zolo
// in the middle of the loop, save, press ENTER — you see the new code.
use greeter::{greet, farewell}
fn main() {
greet("zolo dev")
print("(edit greeter.zolo and save, ENTER to call again, 'q' to quit)")
while true {
let line = io::read("*l")
if line is nil || line == "q" {
break
}
greet("zolo dev")
}
farewell("zolo dev")
}
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
O módulo greeter expõe as duas funções com pub fn. Editar a string dentro de
greet, salvar e pressionar ENTER já mostra o texto novo — a identidade da
tabela de exportações é preservada (identity preserved), então qualquer
módulo que já a importou continua válido automaticamente.
Edite a mensagem enquanto o programa roda; o próximo ENTER usa a versão nova.
// Feature: basic hot-reload — simple module
// Syntax: `pub fn name(...)` in an imported file.
// When to use: edit the function and see the new version without restart.
//
// Edit the string below, save, and the next call from main.zolo
// prints the new version. The `LuaState` stays the same — only the
// `greet` function is swapped in the `greeter` module's exports table.
pub fn greet(name: str) {
print("Hello, {name}! (edit this message and save)")
}
pub fn farewell(name: str) {
print("Bye, {name}.")
}
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
Desafio
Enquanto o programa roda, adicione uma terceira função pub fn shout(name) em
greeter.zolo que imprime em maiúsculas. Chame-a a partir do main.zolo (basta
adicionar shout ao use) e salve os dois arquivos em sequência. Observe a
ordem das mensagens reloaded: no terminal.
Veja também