異なる型の値を決まった構造で管理する
struct 構造体名{
フィールド名: 型,
フィールド名: 型,
…
}
struct Person {
name: String,
mail: String,
age: i32
}
fn print_person(p:Person) {
println!("I'm {}({}). Mail to {}.", p.name, p.age, p.mail);
}
fn main(){
let taro = Person {
name:String::from("Taro"),
mail:String::from("taro@yamada"),
age: 39
};
let hanako = Person {
name:String::from("Hanako"),
mail:String::from("hanako@flower"),
age: 28
};
print_person(taro);
print_person(hanako);
}
### タプル構造体
構造体名の後にタプル()で記述する
struct Person (String, String, i32);
fn print_person(p:Person) {
println!("I'm {}({}). Mail to {}.", p.0, p.2, p.1);
}
fn main(){
let taro = Person (
String::from("Taro"),
String::from("taro@yamada"),
39
);
let hanako = Person (
String::from("Hanako"),
String::from("hanako@flower"),
28
);
print_person(taro);
print_person(hanako);
}
構造体は値を保管するためのもの
implというブロックを使う
出力メソッドを実装
struct Person {
name: String,
mail: String,
age: i32
}
fn person(name:String, mail:String, age)-> Person {
Person {name, mail, age}
}
impl Person {
fn print(&self) {
println!("{}<{}>({}).", self.name, self.mail, self.age);
}
}
fn main(){
let taro = person {
String::from("Taro"),
selfのない関数
struct Person {
name: String,
mail: String,
age: i32
}
fn person(name:String, mail:String, age:i32)-> Person {
Person {name, mail, age}
}
impl Person {
fn print(&self) {
println!("{}<{}>({}).", self.name, self.mail, self.age);
}
fn fields()->[String;3] {
[
String::from("name:String"),
String::from("mail:String"),
String::from("age:i32"),
]
}
}
fn main(){
let taro = person {
String::from("Taro"),
String::from("taro@yamada"),
39
};
let hanako = person {
String::from("Hanako"),
String::from("hanako@flower"),
28
};
taro.print();
hanako.print();
println!("Person's fields: {:?}", Person::fields());
}