gpt4 book ai didi

rust - "cannot find macro"宏自己的doc测试出错

转载 作者:行者123 更新时间:2023-12-03 11:39:52 25 4
gpt4 key购买 nike

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

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

如果我运行 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);
| ^^^^^^

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

macros in Rust's standard library遵循与上面代码相​​同的格式,所以我期待它能够工作。

最佳答案

文档测试自动将代码块包装在 extern crate foo; fn main() { … } 中如果他们在代码中没有找到这些元素,但要获得导出的宏,您需要 #[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)
}

(以 为前缀的行在输出中隐藏,但在为 doc 测试编译的代码中包含,没有标记。)

这在 The Rust Programming Language, first edition 中有介绍.

至于 std , 有一个隐含的 #[macro_use] extern crate std;在所有缺少 #![no_std] 的 crate 中crate 属性,因此它的宏立即起作用。

关于rust - "cannot find macro"宏自己的doc测试出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61509679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com