有没有办法在Rust的公共宏中使用私有函数?

dra*_*tis 5 macros rust

有一个可变参数的C函数,我无法在宏之外调用.该宏应该是公共的,但具有可变参数的C函数不应该是可见的.

有没有办法只让它在宏内部可见?或者也许是一种将函数保留在文档之外的方法?

DK.*_*DK. 6

您唯一能做的就是隐藏这些"内部"符号,使它们不会出现在文档中.例如:

#[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);
}
Run Code Online (Sandbox Code Playgroud)

正如您所料,这绝对不会阻止某人custom_abort__直接打电话.但实际上,如果有人在评论中忽略警告并且无论如何都会这样做,请在代码中断时随意嘲笑他们.

  • *随意嘲笑他们*-等一下,有一段时间我*不应该*嘲笑使用我的代码的人吗?;-) (2认同)