如何在宏内导入类型?

时间:2016-12-31 11:01:38

标签: macros rust

use - 允许函数中间的语句吗?

如果是这样,我如何参考模块(selfsuper?完整路径?)

如果没有,是在我调用宏的文件中导入struct / enum和macro是唯一的选择吗?

2 个答案:

答案 0 :(得分:4)

  

use - 允许函数中间的语句吗?

Yes.

  

如果是这样,我如何参考模块(selfsuper?完整路径?)

     

[来自评论]我如何参考定义宏和类型的模块?

AFAIK,这是不可能的。唯一的希望是特殊的$crate元变量,它引用宏定义的 crate 。因此,您可以并且必须指定要引用的类型的整个路径,像:

use $crate::path::to::MyType;

请注意,此类型必须是公开的才能在使用您的宏的其他包装箱中访问!这意味着该类型属于您的包的公共接口,并且更改其路径被视为一个重大变化。由于破坏性更改应该很少发生,因此您不必经常更改宏定义中的路径; - )

答案 1 :(得分:0)

您可以在函数中使用use。例如:

fn foo() {
    // do some other stuff
    use std::collections::HashMap; // use statement only valid
                                   // inside the current scope
    // use HashMap
}

use语句对于crate root来说总是绝对的。您可以将它们设置为相对于当前模块,如下所示:use self::submodule::Type

这也是documented in the Rust book

相关问题