プログラミング言語Rust 5章 メモ
5.1 構造体のインスタンス化
痒い所に手が届く初期化方法のメモ
struct User {
name: String,
email: String,
sign_in_count: u64,
active: bool,
}
初期化の省略記法
- 同名変数を利用する
fn build_user(email String, name: String) -> User { User { email, name, active: true, sign_in_count: 1, } }
- 既存のインスタンスを利用する
let user2 = User{ email: String::from("hoge@futa.piyo"), name: String::from("foobar"), ..user1 }
タプルの拡張
struct Color(i32, i32, i32)
struct Point(i32, i32, i32)
let dark = Color(0,0,0)
let death_star = Point(0,0,0)
5.2 構造体の利用例
- [derive(Debug)]注釈を構造体に着けたうえで{:?}を使うと、ダンプ表示できる
5.3 メソッドの実装
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32{
self.width * self.height
}
// 他の四角を自分の中に収められるか
// 所有権を奪わないよう、不変参照渡しにする点に注意
fn can_hold(&self, other: &Rectangle) -> bool {
self.width > other.width && self.height > other.height
}
}