4
有一个可变的C函数,我不能在宏外调用。这个宏应该是公共的,但带有可变参数的C函数不应该是可见的。有没有办法在Rust中的公共宏中使用私有函数?
有没有什么办法让它在宏内部可见?或者,也许一种方法来保持文档以外的功能?
有一个可变的C函数,我不能在宏外调用。这个宏应该是公共的,但带有可变参数的C函数不应该是可见的。有没有办法在Rust中的公共宏中使用私有函数?
有没有什么办法让它在宏内部可见?或者,也许一种方法来保持文档以外的功能?
你唯一能做的就是隐藏这样的“内部”符号,使它们不会出现在文档中。例如:
#[macro_export]
macro_rules! custom_abort {
($($args:tt)*) => {
match format!($($args)*) {
msg => $crate::custom_abort__(&msg)
}
};
}
/// This is an implementation detail and *should not* be called directly!
#[doc(hidden)]
pub fn custom_abort__(msg: &str) -> ! {
use std::io::Write;
let _ = writeln!(std::io::stderr(), "{}", msg);
std::process::exit(1);
}
正如您所料,这绝对不防止直接调用custom_abort__
人。但是,如果有人忽略了评论中的警告,并且无论如何都会这样做,那么当他们的代码被破坏时,可以随意嘲笑他们。
*随时嘲笑他们* - 等等,有没有一段时间我不应该嘲笑使用我的代码的人? ;-) – Shepmaster