名前付き構造体
C や C++ と同様に、Rust はカスタム構造体をサポートしています。
struct Person { name: String, age: u8, } fn describe(person: &Person) { println!("{} is {} years old", person.name, person.age); } fn main() { let mut peter = Person { name: String::from("Peter"), age: 27 }; describe(&peter); peter.age = 28; describe(&peter); let name = String::from("Avery"); let age = 39; let avery = Person { name, age }; describe(&avery); let jackie = Person { name: String::from("Jackie"), ..avery }; describe(&jackie); }
This slide should take about 10 minutes.
キーポイント:
- 構造体は、C や C++ においてと同じように機能します。
- C++ と同様に、また C とは異なり、型を定義するのに typedef は必要ありません。
- C++ とは異なり、構造体間に継承はありません。
- ここで、構造体にはさまざまな型があることを説明しましょう。
- サイズがゼロの構造体(例:
struct Foo;
)は、ある型にトレイトを実装しているものの、値自体に格納するデータがない場合に使用できます。 - 次のスライドでは、フィールド名が重要でない場合に使用されるタプル構造体を紹介します。
- サイズがゼロの構造体(例:
- 適切な名前の変数がすでにある場合は、省略形を使用して構造体を作成できます。
- 構文
..avery
を使用すると、明示的にすべてのフィールドを入力しなくても、古い構造体のフィールドの大部分をコピーできます。この構文は、常に最後の要素にする必要があります。