跳到主要内容

自定义函数修改实体类的值和use关键字使用

自定义用户实体类

代码结构

➜  mypro git:(master) ✗ tree -L 3
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── src
│ ├── lib
│ │ ├── config.rs
│ │ └── mod.rs
│ ├── main.rs
│ └── models
│ ├── mod.rs
│ └── user_model.rs

models/user_model.rs

#[derive(Debug)]
pub struct UserInfo {
pub user_id: i32,
pub user_name: String,
pub user_age: u8,
pub user_tags: [&'static str; 5], // 5个字符串参数的数组
}

pub fn new_user_info() -> UserInfo {
UserInfo {
user_id: 0,
user_name: String::new(),
user_age: 0,
user_tags: [""; 5],
}
}

models/mod.rs

pub mod user_model;
危险

这里如果更改了user_model.rs的文件名,上面的mod.rs需要重新编写以下,否则还是不会随着名字修改而识别代码。

main.rs

use models::user_model::{self, UserInfo};

// mod lib; // lib.rs 或者 lib/mod.rs
mod models;

fn set_user(u: &mut models::user_model::UserInfo) {
u.user_id = 101;
u.user_name = String::from("wujie");
u.user_age = 10;
u.user_tags = ["java", "php", "js", "go", "rust"];
}

fn main() {
let mut user = models::user_model::new_user_info();
set_user(&mut user);
println!("{:?}", user);
}

要进行修改值,就得使用mut修饰,这里使用的是引用传递, 所以值的所有者并没有发生改变,所以最后还是能继续打印输出内容。

打印输出内容

UserInfo { user_id: 101, user_name: "wujie", user_age: 10, user_tags: ["java", "php", "js", "go", "rust"] }

使用use关键字来简化代码

use models::user_model::{new_user_info, UserInfo};

// mod lib; // lib.rs 或者 lib/mod.rs
mod models;

fn set_user(u: &mut UserInfo) {
u.user_id = 101;
u.user_name = String::from("wujie");
u.user_age = 10;
u.user_tags = ["java", "php", "js", "go", "rust"];
}

fn main() {
let mut user = new_user_info();
set_user(&mut user);
println!("{:?}", user);
}