Rust 基礎(03) 結構體
結構體
聲明
Rust 通過struct
聲明一個結構體,內部使用字段名: 數據類型,
的格式定義字段。
struct Gire {
Name: String,
Email: String,
Tel: String,
}
使用
初始化的時候需要對結構體中的每一個字段都進行初始化(Rust 不會將未初始化的字段寫入零值),想要調用字段只需要通過對象加點即可。
let mut g = Gire{
Name:String::from("zhang-wei"),
Email:String::from("zhangwei@gmail.com"),
Tel:String::from("171-9845-0989"),
};
println!("my love,the {}",g.Name)
方法
Rust 與 Golang 相似,是將方法綁定到結構體上,而非使用的class
類型,但是與 Golang 不同的是將方法綁定到結構體上不是在函數名前添加結構體名而是使用 impl
聲明一個結構體的方法(一個impl
塊中可以聲明多個方法,一個結構體可以有多個impl
)。所有方法中的第一個參數都是self
,並且可以通過self
調用自己的屬性,如同C++
當中的this
關鍵字————如果可以沒有self
參數,但是那不是方法,而叫關聯函數,調用方法也與普通的方法不同,接下來很快就會講到。
impl Gire {
fn love(self, bf: &str) {
println!("{} and {}", self.Name, bf);
}
fn introduce(self){
println!("name: {}\nemail: {}\ntel: {}\n",self.Name,self.Email,self.Tel);
}
}
關聯函數
關聯函數在定義的時候沒有self
,也無法通過實例化的對象調用,需要通過結構體名直接調用。
fn main(){
...
let name =String::from("zw");
let tel =String::from("173-9777-8889");
let emal =String::from("zw@gmail.com");
let g= Gire::brown(name,tel,emal);
...
}
impl Gire{
fn brown(name: String, tel: String, email: String)->Gire{
Gire { Name: name, Email: email, Tel: tel }
}
}