我有一个文件,其中包含一个锈蚀项目的共享宏。
由于我想在机箱中重用宏(模块之间),所以我使用#[macro_use]
声明模块。
在编写宏时,我将一些共享逻辑拆分到宏中以避免重复,在这种情况下,我不能使用私有函数,它需要是一个宏。如果可能的话,我想隐藏这个共享宏,这样其他模块就不能直接使用它了。
是否有办法使某些宏成为私有的,这样它们就不会通过#[macro_use]
暴露在同一个机箱中的其他模块中
发布于 2016-11-08 02:45:44
实际上,在Rust中有一个成语,用来隐藏“实现-细节”宏。
与其声明单独的宏,不如在现有宏中声明单独的情况。我看到的示例将为此使用impl
关键字,impl
案例位于宏定义的底部。
因此,与其:
macro_rules! hello_impl {
($name:expr) => {
println!("Hello {}!", $name);
}
}
macro_rules! hello_world {
() => {
hello_impl!("world");
}
}
你用:
macro_rules! hello_world {
() => {
hello_world!(impl "world");
},
(impl $name:expr) => {
println!("Hello {}!", $name);
}
}
这样,就不再有实现宏;而且您只有一个宏要导出。
发布于 2016-11-07 23:35:14
当前,宏命名空间边界只能在板条箱之间受到约束。
使某些宏私有的唯一方法是将模块拆分为一个机箱,然后使用#[macro_export]
来定义从该机箱导出的宏。
注意:也许有一些模糊的方法可以做到这一点,但是从阅读文档来看,这个特性似乎没有得到官方的支持,这就是为什么我发布了这个答案--很高兴被证明是错误的!
#锈蚀IRC通道声明这是宏2.0中可能支持的东西。
https://stackoverflow.com/questions/40481199
复制相似问题