問題一覧に戻る
中級構造体
問題49: 構造体メソッド
構造体にメソッドを追加するにはimplブロックを使います。&selfは借用、&mut selfは可変借用、selfは所有権を受け取ります。関連関数(コンストラクタ)はselfパラメータを持たず、::で呼び出します。メソッドはデータと振る舞いをカプセル化し、オブジェクト指向プログラミングを実現します。
struct Rectangle {
width: f64,
height: f64,
}
// implブロック
Rectangle {
// selfを使ったメソッド
fn area(&) -> f64 {
self.width * self.height
}
// 可変selfを使ったメソッド
fn scale(& self, factor: f64) {
self.width *= factor;
self.height *= factor;
}
// 関連関数
fn square(size: f64) -> {
Rectangle {
width: size,
height: size,
}
}
}
fn main() {
let rect = Rectangle { width: 10.0, height: 20.0 };
println!("Area: {}", rect.());
let mut rect2 = Rectangle::(5.0);
rect2.(2.0);
println!("Scaled area: {}", rect2.area());
}