Macros em Rust. macro_rules

Adiei esse dia por muito tempo, mas era impossível adiar para sempre. Bem, chegou a hora. É hora de finalmente entender as macros do Rust. Bem, ou pelo menos comece.





Vamos definir imediatamente porque você deseja usá-los. As macros tratam de metaprogramação e, pode-se até dizer, parcialmente de programação reflexiva. Claro, eu não sou um desenvolvedor de padrões e padrões, mas usar uma macro (declarada por macro_rules!) Como uma substituição para uma função é, na minha opinião, uma má ideia. Primeiro, porque uma função aceita variáveis ​​de um tipo específico, e a macro que aceita uma variável não conhece seu tipo brega, portanto, o significado das operações pode ser entendido apenas pelo nome e pela assinatura da própria macro. E a sintaxe das macros não é tão óbvia ...





Mas espero que este artigo deixe isso mais claro para você.





Que tipo de besta é essa 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, - .





Isso, na verdade, é tudo. Escrever macros usando macro_rules não é tão difícil, o principal é entender as regras básicas. Talvez economize seus nervos e / ou dinheiro. Claro, eu não toquei no mais interessante neste artigo, este é o mais simples do que é. O objetivo deste artigo é mostrar que as macros são fáceis.





Escreva, se você quiser um artigo sobre proc_macro e syn, realmente há algo para ver.








All Articles