繁体   English   中英

在Rust中推荐使用`use`声明的地方在哪里?

[英]Where is the recommended place to put `use` declarations in Rust?

推荐use声明的地方在哪里? 我在书中,常见问题解答,邮件列表或在线论坛中找不到任何决定性的答案。 我正在Rust开始一个新项目,我宁愿立刻采取正确的方法。

建议使用以下两种方法之一吗? 它只是用于“别名”的东西还是它做的更多,比如如果之前没有使用过初始化模块?

use std::io;
use std::io::Write;

fn some_func() -> () {
    [...] // We assume we need std::io here
}

fn some_other_func() -> () {
    [...] // We assume we need std::io and std::io::Write here
}

要么

fn some_func() -> () {
    use std::io;
    [...] // We assume we need std::io here
}

fn some_other_func() -> () {
    use std::io;
    use std::io::Write;
    [...] // We assume we need std::io and std::io::Write here
}

TL; DR:像几乎所有其他软件一样,它取决于你在做什么。 我观察到的(并且更喜欢自己)的常见风格是将它们放在文件的顶部,并且只根据需要将它们移动到更窄的范围。


一般来说,我建议首先在任何extern cratemod语句之后直接放置use语句,用空行分隔:

extern crate foo;
extern crate bar;

mod interesting;

use std::collections::HashMap;
use foo::Foo;
use bar::{Quux, moo};    
use interesting::something;    

// structs, functions, etc.

我将此默认值基于以下事实 - 大多数情况下 - 导入用于多个顶级项目。 因此,仅导入一次是有意义的。

有时导入的特征具有冲突的方法 ,在这种情况下,我将导入范围限定在需要的位置。 在某些情况下,我正在处理单个枚举,并希望对其进行全局导入以避免重新声明枚举的名称:

fn foo(e: MyEnum) {
    use MyEnum::*;

    match e {
        One => 1,
        Two => 2,
    }
}

在某些情况下,冲突的use语句表明您在单个文件中尝试过多,并且应该将其拆分为单独的文件,然后use语句不再含糊不清。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM