从模块访问外部包装箱

时间:2018-09-07 06:20:49

标签: rust

我在项目中添加了依赖项rand

[dependencies]
rand = "0.5"

在我的main.rs中,我有以下内容:

extern crate rand;

pub mod foo;
use foo::Foo;

fn main() {
    println!("{:#?}", Foo::new());
}

在文件foo.rs中:

use rand::Rng;

#[derive(Debug)]
pub struct Foo { bar: bool }

impl Foo {
    pub fn new() -> Foo {
        Foo { bar: rand::thread_rng().gen_bool(0.5) }
    }
}

当我尝试编译它时,出现以下错误:

error[E0658]: access to extern crates through prelude is experimental (see issue #44660)
  --> src\foo.rs:11:18
   |
11 |             bar: rand::thread_rng().gen_bool(0.5)
   |                  ^^^^

如何使用模块中的外部包装箱?

1 个答案:

答案 0 :(得分:4)

extern crate项目将包装箱的名称带到名称空间中。该模块具有自己的名称空间,因此您需要导入rand本身-use rand::{self, Rng};-因为您正在调用rand::thread_rng()

extern crate rand;

mod foo {
    use rand::{self, Rng};

    #[derive(Debug)]
    pub struct Foo { bar: bool }

    impl Foo {
        pub fn new() -> Foo {
            Foo { bar: rand::thread_rng().gen_bool(0.5) }
        }
    }
}

use foo::Foo;

fn main() {
    println!("{:#?}", Foo::new());
}

Playground

或者您可以导入use rand::{thread_rng, Rng};并将呼叫更改为

Foo { bar: thread_rng().gen_bool(0.5) }

Playground