我正在尝试将文档测试添加到我正在导出的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测试中添加的合法方式,所以没有运气.
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]