Macros con repetición en Rust
La repetición captura una lista, así que una macro arma una colección entera.
use std::collections::HashMap;
macro_rules! table {
($($key:expr => $value:expr),* $(,)?) => {{
let mut map = HashMap::new();
$(map.insert($key, $value);)*
map
}};
}
macro_rules! log_all {
($($line:expr);*) => {
$(println!("[log] {}", $line);)*
};
}
fn main() {
let tours = table! {
"rust" => 11,
"python" => 6,
};
println!("{}", tours["rust"]);
log_all!("started"; "finished");
}
Cómo funciona
$( ... ),*coincide con una lista separada por comas.- El cuerpo se repite una vez por elemento capturado.
- Así funcionan las macros al estilo de
vec!yhashmap!.
Palabras clave y builtins usados aquí
fnletmutuse
El intento, en números
- Líneas
- 25
- Caracteres a escribir
- 384
- Tokens
- 142
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 77 segundos.
Paso 3 de 3 en Macros; paso 9 de 12 en Módulos, pruebas y macros.