自定义函数修改实体类的值和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);
}