モジュールのレッスン (2/2)
メソッドと impl ブロック
Rustでは、メソッドは関数に似ていますが、メソッドは構造体(または列挙型またはトレイト)のコンテキスト内で定義され、その最初のパラメータは常に self で、メソッドが呼び出される構造体のインスタンスを表します。
impl を使用したメソッドの定義
構造体にメソッドを定義するには、構造体の名前を指定した impl (実装) ブロックを使用します。
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
// This is an instance method. It takes &self for reading.
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect = Rectangle { width: 30, height: 50 };
// Call the method using dot notation
println!("The area is: {}", rect.area());
}関連する (静的) 関数
最初のパラメーターとして self を 受け入れない impl ブロック内で定義された関数は、関連関数 (他の言語の静的メソッドに相当) と呼ばれます。
これらは、構造体の新しいインスタンスを返すコンストラクターとしてよく使用されます。これらを呼び出すには、二重コロン :: 構文を使用します。
impl Rectangle {
// Associated function
fn square(size: u32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}
}
fn main() {
// Call the associated function
let sq = Rectangle::square(10);
}状態を変更するメソッド: &mut self
メソッドで構造体のフィールドを変更する必要がある場合は、最初のパラメータを &mut self として宣言する必要があります。メソッドが呼び出されるインスタンス自体は、可変として宣言される必要があります (let mut)。
impl Rectangle {
fn double_size(&mut self) {
self.width *= 2;
self.height *= 2;
}
}自分で試してみてください
&self を受け取り、u32 (幅と高さの乗算) を返す area メソッドを定義して、impl ブロックを完成させます。
ヒントを表示
「impl Rectangle」ブロック内に「fn area(&self) -> u32 { self.width \* self.height }」と書きます。
3 回の試行後に解決策が利用可能になります
impl Rectangle 内で square 関連関数を定義します。この関数は、size: u32 を受け取り、size に等しい幅と高さの Rectangle インスタンスを返します。
ヒントを表示
`impl`ブロック内に`fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } }`と書きます。
3 回の試行後に解決策が利用可能になります
スケール ミューテーター メソッドを impl ブロック内の Rectangle に追加します。 scale メソッドは、self への変更可能な参照 (&mut self) と、factor: u32 パラメーターを受け取り、Rectangle の幅と高さの両方に係数を乗算する必要があります。
ヒントを表示
self.width と self.height に factor を乗算して更新するには、 fnscale(&mut self,actor: u32) を実装します。
3 回の試行後に解決策が利用可能になります