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