Rust中的导入/模块系统如何工作?

时间:2017-05-19 15:02:46

标签: rust

我正在学习Rust。我刚刚掌握了借用系统,但我不知道模块系统是如何工作的。

要导入extern模块,我必须编写extern crate sdl2;。但是,如果我想导入一个非外部箱子呢?

我知道我可以使用mod来定义模块,如:

mod foo {
    fn bar(length: i32) -> Vec<i32> {
        let mut list = vec![];
        for i in 0..length + 1 {
            if list.len() > 1 {
                list.push(&list[-1] + &list[-2]);
            } else {
                list.push(1);
            }
        }
        list
    }
}

并在foo::的同一文件中使用它,但我如何使用其他文件中的函数/模块?

为了细节,想象一下这个设置:

.
|-- Cargo.lock
|-- Cargo.toml
`-- src
    |-- foo.rs
    `-- main.rs

所以在 src / foo.rs 中我有:

fn bar(length: i32) -> Vec<i32> {
    let mut list = vec![];
    for i in 0..length + 1 {
        if list.len() > 1 {
            list.push(&list[-1] + &list[-2]);
        } else {
            list.push(1);
        }
    }
    list
}

我想在src/main.rs中使用它。当我尝试普通use foo::bar时,我得到:

  |
1 | use foo::bar;
  |     ^^^^^^^^ Maybe a missing `extern crate foo;`?

将函数放入mod foo {...}时,我得到同样的错误。

如果有关于此主题的帖子,请给我一个链接,因为除了Rust Book之外我什么都没有。

1 个答案:

答案 0 :(得分:-1)

将此声明添加到d$id文件中:

main.rs

其中的行为类似于:

mod foo;

虽然它知道如果没有mod foo { include!("foo.rs") } 个文件,但有一个foo.rs文件,则要包含该文件。