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