跳到主要内容

Rust中package crate mod的关系

1. package和crate之间的关系

如果你的上一个语言是Java,那么你最好忘记Java的那一套对应关系,package在Rust当中既可以指项目,也可以指一个依赖。

如果你希望和Java对应起来,package=project or dependency(in Java)

这种标新立异的取名属实让人觉得困惑。

2. crate和mod的关系

crate中可以有多个module , module中还可以包含module

从一个简单的例子出发,mod写在main.rs

mod system_config{
pub mod load_config_from_resource{
pub fn load(){
println!("this config load from resource file");
}
}

pub mod load_config_from_internet{
pub fn load(){
println!("this config load from internet");
}
}

}

fn main() {
system_config::load_config_from_resource::load();
system_config::load_config_from_internet::load();
}

这段代码是可以执行的,执行的结果是:

当中的调用方式我们也可以写成这样,注意,这里main 中开始的结构是crate

fn main() {
crate::system_config::load_config_from_resource::load();
crate::system_config::load_config_from_internet::load();
}

假设在mod system_config中也添加load方法,那么可以可以的,如下


mod system_config{
pub mod load_config_from_resource{
pub fn load(){
println!("this config load from resource file");
}
}

pub mod load_config_from_internet{
pub fn load(){
println!("this config load from internet");
}
}

pub fn load(){
println!("this config load by default function");
}

}

fn main() {
crate::system_config::load_config_from_resource::load();
crate::system_config::load_config_from_internet::load();
crate::system_config::load();
}

执行的结果是:

然后我们把mod拆分到其他的文件。

title: Rust中package、crate、mod的关系 tags:

  • rust

我在项目的根目录下创建了一个文件夹,然后文件夹中又新建了一个mod.rs(必须要叫这个名字),此时项目结构如下图所示:

project-name:
src:
config:
mod.rs
resources
main.rs

此时在main.rs中的调用如下:

mod config;

fn main() {
config::system_config::load_config_from_resource::load();
config::system_config::load_config_from_internet::load();
config::system_config::load();
}

你可能注意到在main.rs中的引用是 mod config, 因为rust默认会使用文件夹的名字且要求文件夹中存在文件mod.rs