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拆分到其他的文件。

我在项目的根目录下创建了一个文件夹,然后文件夹中又新建了一个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

# Rust 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×