Macros dans Rust. macro_rules

J'ai reporté cette journée pendant longtemps, mais il était impossible de reporter indéfiniment. Eh bien, le moment est venu. Il est temps de se familiariser enfin avec les macros Rust. Eh bien, ou du moins commencer.





Définissons immédiatement pourquoi vous souhaitez les utiliser. Les macros concernent la métaprogrammation et, pourrait-on même dire, en partie la programmation réflexive. Bien sûr, je ne suis pas un développeur de modèles et de standards, mais utiliser une macro (déclarée par macro_rules!) En remplacement d'une fonction est, à mon avis, une mauvaise idée. Premièrement, parce qu'une fonction accepte des variables d'un type spécifique et que la macro qui accepte une variable ne connaît pas son type ringard, par conséquent, la signification des opérations ne peut être comprise que par le nom et par la signature de la macro elle-même. Et la syntaxe des macros n'est pas si évidente ...





Mais j'espère que cet article vous le rendra plus clair.





Quel genre de bête est cette 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, - .





C'est, en fait, tout. Ecrire des macros à l'aide de macro_rules n'est pas si difficile, l'essentiel est de comprendre les règles de base. Peut-être que cela vous épargnera vos nerfs et / ou votre argent. Bien sûr, je n'ai pas abordé le plus intéressant dans cet article, c'est le plus simple de ce qui est. Le but de cet article est de montrer que les macros sont faciles.





Écrivez, si vous voulez un article sur proc_macro et syn, il y a vraiment quelque chose à voir.








All Articles