Reload Básico
En esta página
Cada demo de este capítulo es un sub-proyecto con su propio main.zolo y
módulos separados. Para ejecutarlo, abre el directorio en la terminal y ejecuta
zolo dev:
cd examples/features/21-hot-reload/01-basic-reload
zolo dev main.zolo
El punto de entrada importa dos funciones del módulo greeter y entra en un
bucle de lectura interactivo. El secreto está en cómo se compila
use greeter::{greet, farewell}: cada llamada pasa por un live-binding thunk
que re-resuelve la función en la tabla de exportaciones del módulo — nunca
guarda un puntero fijo.
Punto de entrada: bucle de ENTER + importación 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")
}
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
El módulo greeter expone ambas funciones con pub fn. Edita la cadena dentro
de greet, guarda y pulsa ENTER — el texto nuevo aparece de inmediato. La
identidad de la tabla de exportaciones se preserva (identity preserved), por
lo que cualquier módulo que ya la haya importado sigue siendo válido
automáticamente.
Edita el mensaje mientras el programa corre; el próximo ENTER usa la versión nueva.
// 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}.")
}
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Desafío
Mientras el programa está en ejecución, agrega una tercera función
pub fn shout(name) en greeter.zolo que imprima en mayúsculas. Llámala desde
main.zolo (basta con añadir shout al use) y guarda ambos archivos en
secuencia. Observa el orden de los mensajes reloaded: en la terminal.
Consulta también