在宏自己的doc测试中"找不到宏"错误

Gus*_*son 11 rust

我正在尝试将文档测试添加到我正在导出的Rust宏中.像这样的东西:

/// Usage:
///
/// ```
/// let x = addone!(100);
/// ```
#[macro_export]
macro_rules! addone {
    ($x:expr) => ($x + 1)
}
Run Code Online (Sandbox Code Playgroud)

如果我cargo test继续这样做,我明白了

failures:

---- src/lib.rs - addone (line 3) stdout ----
    error: cannot find macro `addone!` in this scope
 --> src/lib.rs:2:9
  |
2 | let x = addone!(100);
  |         ^^^^^^
Run Code Online (Sandbox Code Playgroud)

我想不出macro_use在doc测试中添加的合法方式,所以没有运气.

Rust标准库中遵循与上面代码相​​同的格式,因此我希望它能够正常工作.

Chr*_*gan 14

extern crate foo; fn main() { … }如果代码块没有在代码中找到这些元素,Doc测试会自动将代码块包装起来,但是为了获得导出的宏,您需要使用该#[macro_use]属性extern crate foo;.

因此,你应该这样写:

/// Usage:
///
/// ```
/// # #[macro_use] extern crate foo; fn main() {
/// let x = addone!(100);
/// # }
/// ```
#[macro_export]
macro_rules! addone {
    ($x:expr) => ($x + 1)
}
Run Code Online (Sandbox Code Playgroud)

(该线前缀得到隐藏在输出,但包括,SANS的标记,在获取该文档测试编译的代码.)

这是Rust编程语言的第一版.

至于所有包含缺少crate属性的crate std都有一个暗示,因此它的宏立即起作用.#[macro_use] extern crate std;#![no_std]