¡Hola a todos!
Estoy teniendo algunos problemas al utilizar macros en Rust y esperaba que alguien pudiera ayudarme. He estado leyendo la documentación de Rust sobre macros, pero aún no he logrado entender completamente su funcionamiento.
Aquí está el código que tengo actualmente:
macro_rules! print_hello {
() => {
println!("¡Hola!");
};
($name:expr) => {
println!("¡Hola, {}!", $name);
};
}
fn main() {
print_hello!();
print_hello!("Juan");
}
Al compilar este código, obtengo el siguiente error:
error: no rules expected the token `,` at this point.
--> src/main.rs:10:18
|
4 | ($) => {
| - unexpected `,` after macro_rules head
...
10 | print_hello!("Juan");
| ^
error: aborting due to previous error
Parece que el compilador de Rust está teniendo problemas con la llamada print_hello!("Juan")
. Intenté ajustar la macro, pero aún no puedo resolver el problema.
¿Alguien puede entender por qué estoy obteniendo este error y cómo puedo solucionarlo?
¡Gracias de antemano por su ayuda!
¡Hola Brisa!
Parece que el problema está en la definición de tu macro print_hello!
. Tienes un pequeño error tipográfico en la captura del argumento $name
. Usaste $
en lugar de $(name:expr)
. Además, debes asegurarte de que las ramas de la macro estén separadas por punto y coma. Aquí está la corrección:
macro_rules! print_hello {
// La rama para cuando no hay argumentos
() => {
println!("¡Hola!");
};
// La rama para cuando hay un argumento, $name es una expresión
($name:expr) => {
println!("¡Hola, {}!", $name);
};
}
fn main() {
print_hello!(); // Llamada sin argumentos
print_hello!("Juan"); // Llamada con un argumento
}
Con estos cambios, tu macro debe funcionar correctamente para ambas llamadas. La primera imprimirá "¡Hola!" y la segunda "¡Hola, Juan!".
Recuerda que las macros en Rust pueden ser un poco complicadas al principio, pero son muy poderosas una vez que te acostumbras a su sintaxis y funcionamiento. ¡Sigue practicando y estarás manejándolas sin problemas en poco tiempo!