2016-12-31 64 views
1

use - 函数中间的语句允许吗?如何在宏内导入类型?

如果是这样,我怎么参阅模块(selfsuper?完整路径?)

如果没有,则输入一个struct /枚举和宏文件在我调用宏只选项?

+0

*在允许的函数中间使用了语句* - 你几乎可以尝试这个,很可能用更少的字符来提出问题。 – Shepmaster

+0

我做了,但它没有工作,我不知道为什么,因为它是在一个宏,我认为这个错误是有点关闭。问了这个问题之后,我用2个括号将2条语句包装起来了,它起作用了(所以它成了我想的表达式) –

回答

4

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

Yes.

如果是这样,我怎么参阅模块(selfsuper?完整路径?)

[从评论]如何我指的是模块的宏和类型是在?

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

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

请注意,此类型必须公开才能在使用您的宏的其他箱子中访问!这意味着该类型属于您的箱子的公共界面,并且改变它的路径被认为是一个重大改变。由于突变应该很少出现,所以你不需要经常在宏定义中更改路径;-)

1

您可以简单地在一个函数中使用use。例如:

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

use陈述始终是绝对的箱子根。你可以使它们相对于当前模块是这样的:use self::submodule::Type

这也是documented in the Rust book