Makros in Rust. macro_rules

Ich habe diesen Tag für eine lange Zeit verschoben, aber es war unmöglich, ihn für immer zu verschieben. Nun, die Zeit ist gekommen. Es ist Zeit, sich endlich mit Rust-Makros auseinanderzusetzen. Nun, oder zumindest anfangen.





Lassen Sie uns sofort definieren, warum Sie sie verwenden möchten. Bei Makros geht es um Metaprogrammierung und, man könnte sogar sagen, teilweise um reflektierende Programmierung. Natürlich bin ich kein Entwickler von Mustern und Standards, aber die Verwendung eines Makros (deklariert durch macro_rules!) Als Ersatz für eine Funktion ist meiner Meinung nach eine schlechte Idee. Erstens, da eine Funktion Variablen eines bestimmten Typs akzeptiert und das Makro, das eine Variable akzeptiert, ihren Typ nicht kitschig kennt, kann die Bedeutung von Operationen nur unter dem Namen und der Signatur des Makros selbst verstanden werden. Und die Syntax von Makros ist nicht so offensichtlich ...





Aber hoffentlich wird dieser Artikel es für Sie klarer machen.





Was für ein Biest ist das 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, - .





Das ist in der Tat alles. Das Schreiben von Makros mit macro_rules ist nicht so schwierig. Hauptsache, Sie müssen die Grundregeln verstehen. Vielleicht spart es Ihre Nerven und / oder Geld. Natürlich habe ich das Interessanteste in diesem Artikel nicht angesprochen, dies ist das Einfachste von dem, was ist. Der Zweck dieses Artikels ist es zu zeigen, dass Makros einfach sind.





Schreiben Sie, wenn Sie einen Artikel über proc_macro und syn möchten, gibt es wirklich etwas zu sehen.








All Articles