我想写一个函数,比如程序宏
my_macro
这扩展到了
lazy_static
宏调用。我想用一种
我的_宏
不需要列出
懒惰的静态
并明确使用它(
use lazy_static::lazy_static
).
以下是最简单的示例代码:
lib。rs(我的箱子)
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
#[proc_macro]
pub fn my_macro(_item: TokenStream) -> TokenStream {
quote!(
lazy_static! {
static ref EXAMPLE: u8 = 42;
}
).into()
}
货物toml(我的_宏板条箱)
[package]
name = "my_macro"
version = "0.1.0"
edition = "2018"
[dependencies]
quote = "0.6"
lazy_static = "1.2.0"
[lib]
proc-macro = true
lib。rs(使用板条箱)
use my_macro::my_macro;
// use lazy_static::lazy_static;
my_macro!();
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
assert_eq!(*EXAMPLE, 42);
}
}
货物toml(使用板条箱)
[package]
name = "import_test"
version = "0.1.0"
edition = "2018"
[dependencies]
my_macro = { path = "./my_macro" }
# lazy_static = "1.2.0"
上述代码导致编译错误:
error: cannot find macro `lazy_static!` in this scope
--> src/lib.rs:6:1
|
6 | my_macro!();
| ^^^^^^^^^^^^
我理解这个错误,我知道我可以通过让
usage
板条箱依赖于
懒惰的静态
和
use
它在
lib.rs
(参见注释行)。
问题是,这意味着所有使用
我的_宏
必须列出
懒惰的静态
在他们的依赖中。这似乎不对,我想知道是否有其他选择。我已经尝试了一些方法,但都没有解决问题。