//Rust 并不允许只将某个字段标记为可变 struct User { email: String, name:String, age:i32, sex:String, active:bool, } fn main() { let mut user1=User{ email: String::from("1@qq.com"), name:String::from("hehe"), age:23, sex: String::from("man"), active:true, }; user1.name =String::from("zhangsan"); let user2 = User { email: String::from("3@qq.com"), name: String::from("lisa"), ..user1 //其余值来自 user1 变量中实例的字段,简写形式 }; let user3=set_user_value(String::from("2@qq.com"),String::from("xiaohong")); } fn set_user_value(email:String,name:String)->User { //参数名和结构体的名字相同时,可简写比如email:email 可以直接写email, User { email, name, age:23, sex:String::from("man"), active:true, } }
User 结构体的定义中,我们使用了自身拥有所有权的 String 类型而不是 &str 字符串 slice 类型。
这是一个有意而为之的选择,因为我们想要这个结构体拥有它所有的数据,为此只要整个结构体是有效的话其数据也是有效的。
可以使结构体存储被其他对象拥有的数据的引用,不过这么做的话需要用上 生命周期(lifetimes)