如何在 Rust 中导入宏?
How to import macros in Rust?
我正在为如何从外部 crate 导入宏而苦恼。在我的 main.rs 中,我正在导入 Glium 板条箱:
#![macro_use]
extern crate glium;
pub use glium::*;
// where my actual main function will be done from
mod part01drawtriangle;
fn main() {
part01drawtriangle::main();
}
在我的主要函数所在的另一个文件中,我调用了那个板条箱中的一个宏:
pub fn main() {
implement_vertex!(Vertex, position);
}
构建时,我收到错误消息:
error: macro undefined: 'implement_vertex!'
#[macro_use]
,不是#![macro_use]
。
#[..]
将属性应用于它之后的事物(在本例中为 extern crate
)。 #![..]
将属性应用到 containing 事物(在本例中为根模块)。
In Rust 2018, you can import specific macros from external crates via use
statements, rather than the old #[macro_use]
attribute.
// in a `bar` crate's lib.rs:
#[macro_export]
macro_rules! baz {
() => ()
}
// in your crate:
use bar::baz;
// Rather than:
//
// #[macro_use]
// extern crate bar;
This only works for macros defined in external crates. For macros defined locally, #[macro_use] mod foo;
is still required, as it was in Rust 2015.
我正在为如何从外部 crate 导入宏而苦恼。在我的 main.rs 中,我正在导入 Glium 板条箱:
#![macro_use]
extern crate glium;
pub use glium::*;
// where my actual main function will be done from
mod part01drawtriangle;
fn main() {
part01drawtriangle::main();
}
在我的主要函数所在的另一个文件中,我调用了那个板条箱中的一个宏:
pub fn main() {
implement_vertex!(Vertex, position);
}
构建时,我收到错误消息:
error: macro undefined: 'implement_vertex!'
#[macro_use]
,不是#![macro_use]
。
#[..]
将属性应用于它之后的事物(在本例中为 extern crate
)。 #![..]
将属性应用到 containing 事物(在本例中为根模块)。
In Rust 2018, you can import specific macros from external crates via
use
statements, rather than the old#[macro_use]
attribute.
// in a `bar` crate's lib.rs:
#[macro_export]
macro_rules! baz {
() => ()
}
// in your crate:
use bar::baz;
// Rather than:
//
// #[macro_use]
// extern crate bar;
This only works for macros defined in external crates. For macros defined locally,
#[macro_use] mod foo;
is still required, as it was in Rust 2015.