是use
- 允许函数中间的语句吗?
如果是这样,我如何参考模块(self
?super
?完整路径?)
如果没有,是在我调用宏的文件中导入struct / enum和macro是唯一的选择吗?
答案 0 :(得分:4)
是
use
- 允许函数中间的语句吗?
如果是这样,我如何参考模块(
self
?super
?完整路径?)[来自评论]我如何参考定义宏和类型的模块?
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