同文件内
在main.rs文件中
mod utils{
pub fn add(x: u32, y: u32) ->u32{
x+y
}
}
fn main(){
use self::utils::add;
println!("{}",add(3, 4))
}
self
表示自身模块
同级目录下
在utils.rs文件中
// utils.rs中
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
在main.rs中使用utils.rs文件中的add方法
方式1 这种方式在调用函数的时候比较麻烦,还需要在函数前加上模块名utils::add(3, 5)
,能直接方法名add()
吗?当然可以,见方式2
mod utils;
fn main() {
let result = utils::add(3, 5); // 调用 add 函数
println!("Result: {}", result);
}
方式2
mod utils;
// 使用绝对路径的方式来引用 匹配根目录src/main.rs::文件名utils::utils模块名字::内部函数add
use crate::utils::add;
fn main() {
let result = add(3, 5); // 调用 add 函数
println!("Result: {}", result);
}
同模块下多个函数调用
utils.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
pub fn sub(a: i32, b: i32) -> i32 {
a - b
}
当一个模块下有多个函数我们需要,难道我们要一个一个引入吗?当然不!!
方式一 * 导入所有
*
代表导入该模块下所有暴露的内容,这种方式容易引起冲突,建议使用方式2
mod utils;
use crate::utils::*;
fn main() {
let add_res = add(3, 5); // 调用 add 函数
let sub_res = sub(5, 3);
println!("Result: {},{}", add_res,sub_res);// 8 , 2
}
方式二,命名引入
用{}
指定要导入的内容
mod utils;
use crate::utils::{add,sub};
fn main() {
let add_res = add(3, 5); // 调用 add 函数
let sub_res = sub(5, 3);
println!("Result: {},{}", add_res,sub_res);
}
调用子目录下的模块
我们先看一下目录结构,现在我们想在main.rs中调用user.rs中的函数。
,
-module
-src
main.rs
-user
mod.rs
user.rs
文件src/user/user.rs
//user.rs
use std::collections::HashMap;
pub fn get_user_info<'a>()->HashMap<String, String>{
let mut user:HashMap<String,String> = HashMap::new();
user.insert("name".to_string(),String::from("uerss"));
for i in 1..=5{
print!("{}",i);
user.insert(format!("json{}",i),format!("json{}",i));
}
user
}
在main.rs中我们如何调用呢?
1.在user/目录下创建mod.rs文件
pub mod user;
2.声明模块mod user;
3.导入模块中的要使用的use user::user::{get_user_info};
mod user;
use user::user::{get_user_info};
fn main() {
let user_map = get_user_info();
println!("{}",user_map.len());
for user in user_map{
println!("{:?}\n",user);
}
}