Saltar al contenido

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.

main.zolo
Playground
// 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.

greeter.zolo
Playground
// 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.

Buscar en Zolo

9 resultados

enespt-br