0

例如,在 Rust 2018 中,我可以使用extern self as crate_name然后使用完全限定的语法

extern crate self as crate_name; //set our crate name
pub struct Member;
fn test() { 
    ::crate_name::Member; //use fully-qualified name
}

但是我似乎无法让它在 doctest 中工作:

/// ```
/// extern crate self as crate_name; //set the crate name
/// pub struct Member;
/// fn test() { 
/// ::crate_name::Member; //use fully-qualified name
/// }
/// ```
fn example() { }

Member错误[E0425]:在模块中找不到值crate_name

我应该提一下,我实际上是在 doctesting 一个 procmacro。也就是说,a) 测试需要包含完全限定的语法,因为 procmacro 会扩展到该语法,b) 我需要调整测试前奏,以便扩展能够编译。基本上,doctest 应该模拟类型/路径,以便 procmacro 可以工作。

4

1 回答 1

0

这是因为如此处所述,如果fn main()没有出现在 doctest 中,rustdoc 会将测试包装在 amain中,因此模拟类型实际上是在此函数中声明的。

在测试中包含一个main函数会选择退出,并允许控制声明类型的位置

/// ```
/// extern crate self as crate_name; //pretend we're some crate
/// pub struct Member;
/// fn main() { ::crate_name::Member; //demo fully-qualified name
/// }
/// ```
fn example() { }
于 2021-05-08T21:19:54.003 回答