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

时间:2016-02-21 12:20:20

标签: macros rust

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

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

1 个答案:

答案 0 :(得分:5)

你唯一能做的就是隐藏这样的"内部"这些符号不会出现在文档中。例如:

#[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__。但实际上,如果有人在评论中忽略警告并且无论如何都会这样做,那么当代码中断时,请随意嘲笑它们。