มาโครภายในลังเดียวกัน
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
#[macro_use]
หากคุณต้องการใช้แมโครในลังเดียวกันโมดูลแมโครของคุณถูกกำหนดไว้ในความต้องการของแอตทริบิวต์
สามารถใช้มาโครได้หลังจากกำหนดไว้แล้วเท่านั้น ซึ่งหมายความว่าสิ่งนี้ใช้ไม่ได้:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
มาโครข้ามลัง
กับการใช้งานmacro_rules!
แมโครจากลังอื่น ๆ #[macro_export]
แมโครตัวเองต้องการแอตทริบิวต์ use crate_name::macro_name;
ลังการนำเข้านั้นสามารถนำเข้าแมโครผ่าน
ลัง util
#[macro_export]
macro_rules! foo {
() => ()
}
ลัง user
use util::foo;
foo!();
โปรดทราบว่ามาโครจะอยู่ที่ระดับบนสุดของลังเสมอ ดังนั้นแม้ว่าfoo
จะเป็นภายในmod bar {}
ที่user
ลังจะยังคงต้องมีการเขียนuse util::foo;
และการไม่ได้ use util::bar::foo;
ก่อนเกิดสนิม 2018 คุณต้องนำเข้ามาโครจากลังอื่นโดยการเพิ่มแอตทริบิวต์#[macro_use]
ในextern crate util;
คำสั่ง util
ที่จะนำเข้าแมโครทั้งหมดจาก หรือ#[macro_use(cat, dog)]
อาจใช้เพื่อนำเข้ามาโครcat
และdog
. ไวยากรณ์นี้ไม่จำเป็นอีกต่อไป
ข้อมูลเพิ่มเติมสามารถดูได้ในสนิมเขียนโปรแกรมภาษาบทที่เกี่ยวกับมาโคร
module::my_macro!()?