Makro di Rust. macro_rules

Saya menunda hari ini untuk waktu yang lama, tetapi tidak mungkin untuk menunda selamanya. Nah, waktunya telah tiba. Saatnya untuk akhirnya memahami makro Rust. Yah, atau setidaknya mulai.





Mari kita segera tentukan mengapa Anda ingin menggunakannya. Makro adalah tentang metaprogramming dan, bahkan bisa dikatakan, sebagian tentang pemrograman reflektif. Tentu saja, saya bukan pengembang pola dan standar, tetapi menggunakan makro (dideklarasikan oleh macro_rules!) Sebagai pengganti suatu fungsi, menurut saya, ide yang buruk. Pertama, karena suatu fungsi menerima variabel dari tipe tertentu, dan makro yang menerima variabel tidak tahu tipenya, oleh karena itu, makna operasi hanya dapat dipahami dengan nama dan tanda tangan makro itu sendiri. Dan sintaks makro tidak begitu jelas ...





Namun semoga artikel ini lebih memperjelas buat anda.





Binatang macam apa macro_rules ini!?

. 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, - .





Faktanya, itu saja. Menulis macro menggunakan macro_rules tidaklah terlalu sulit, yang utama adalah memahami aturan dasarnya. Mungkin itu akan menyelamatkan saraf dan / atau uang Anda. Tentu saja, saya tidak menyentuh yang paling menarik dalam artikel ini, ini yang paling sederhana. Tujuan artikel ini adalah untuk menunjukkan bahwa makro itu mudah.





Tulis, jika Anda ingin artikel tentang proc_macro dan syn, benar-benar ada sesuatu untuk dilihat.








All Articles