Macros en Rust. macro_reglas

Pospuse este día durante mucho tiempo, pero era imposible posponerlo para siempre. Bueno, ha llegado el momento. Es hora de finalmente familiarizarse con las macros de Rust. Bueno, o al menos empezar.





Definamos inmediatamente por qué quiere usarlos. Las macros tratan de la metaprogramación y, incluso podría decirse, en parte de la programación reflexiva. Por supuesto, no soy un desarrollador de patrones y estándares, pero usar una macro (declarada por macro_rules!) Como reemplazo de una función es, en mi opinión, una mala idea. Primero, debido a que una función acepta variables de un tipo específico, y la macro que acepta una variable no conoce su tipo cursi, por lo tanto, el significado de las operaciones solo se puede entender por el nombre y por la firma de la macro misma. Y la sintaxis de las macros no es tan obvia ...





Pero espero que este artículo te lo aclare más.





¿¡Qué clase de bestia es esta macro_rules!?

. macro_rules! - , . - , , unwrap. , , , .





, .





:





macro_rules! uncover{







    ($var:ident) => {







        match $var{







            Some(t) => t,







            None => panic!("None value")







        }







    }







}







fn main(){







    let x = Some(2i32);







    let unwrapped = uncover!(x);







    println!("{}", unwrapped);







}







-… . ? -, uncover: 





macro_rules! uncover







$var ident. , ident , . , .





- , , . , $var - , uncover ( , ).





, Rust , , : . , ? , . :





let unwrapped = uncover!(x);







:





let unwrapped = match x{







    Some(t) => t,







    None => panic!(“None value”)







};







- . , ( - inline-).  





let x = 2i32;







let unwrapped = uncover!(x);







, - . -, , .





Summary

, , , ? , . , , ? O(1) : list![1,2,3] ? ? , macro_rules! -, , proc_macro, syn, qoute TokenTree, - .





Eso, de hecho, es todo. Escribir macros usando macro_rules no es tan difícil, lo principal es comprender las reglas básicas. Tal vez le ahorre los nervios y / o el dinero. Por supuesto, no mencioné lo más interesante en este artículo, este es el más simple de lo que es. El propósito de este artículo es mostrar que las macros son fáciles.





Escribe, si quieres un artículo sobre proc_macro y syn, realmente hay algo que ver.








All Articles