[Chapter 5-3]Rustメソッド(method)
メソッド(method)は関数に似ています.ただし、メソッドは、関数とは異なり、構造の内容内(または列挙オブジェクトまたはツリーオブジェクト内)に定義されます.最初のパラメータは常にselfであり、メソッド呼び出しの構造体インスタンスを表す.
メソッドの定義
chapter 5-2のコードを変更しましょう.パラメータが
Rectangle
インスタンスのarea
関数をRectangle
構造体で定義されたarea
メソッドに変更します.#[derive(Debug)]
struct Rectangle {
length: u32,
width: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.length * self.width
}
}
fn main() {
let rect1 = Rectangle { length: 50, width: 30 };
println!(
"The area of the rectangle is {} square pixels.",
rect1.area()
);
}
Rectangle
で定義します. impl
起動ブロック. area
関数#カンスウ# impl
カッコ内に移動し、フラグ本体内のすべての位置の最初のパラメータを指定します. self
に変更されました. main
関数では、 Rectangle
実例の上着 area
方法を簡略化するために メソッド構文(method syntax) サポートされています.前のコードから
&Rectangle
に示すように &self
使用されています.所有権を取得する必要はありません.データを読み込むだけです.より多くのパラメータを持つ方法
今回は、
Rectangle
の例が別のRectangle
の例であると仮定し、2番目のRectangle
がself
に完全に入ることができる場合は、true
に戻って、そうでなければfalse
に戻ってみる.impl Rectangle {
fn area(&self) -> u32 {
self.length * self.width
}
fn can_hold(&self, other: &Rectangle) -> bool {
self.length > other.length && self.width > other.width
}
}
fn main() {
let rect1 = Rectangle { length: 50, width: 30 };
let rect2 = Rectangle { length: 40, width: 10 };
let rect3 = Rectangle { length: 45, width: 60 };
println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
}
結果:Can rect1 hold rect2? true
Can rect1 hold rect3? false
rect1.can_hold(&rect2)
は&rect2
を超え、これはRectangle
例rect2
の不変性借用である.rect2
しか読みたくないからです.main
は、rect2
の所有権を保持し、can_hold
メソッド呼び出し後に再使用することができる.関連関数
self
パラメータなしの関数 impl
で定義できます.これは. 関連関数 と呼ぶ.これは、この関数が構造体に関連しているためです.一緒に作業する構造体インスタンスがないため、メソッドではなく関数です.関連関数は主に、次の例に示すように、新しい構造体インスタンスを返す構造関数に使用されます.
impl Rectangle {
fn square(size: u32) -> Rectangle {
Rectangle { length: size, width: size }
}
}
関連関数を呼び出すには、let sq = Rectangle::square(3);
などの構造体名付き::
構文を使用します.Reference
この問題について([Chapter 5-3]Rustメソッド(method)), 我々は、より多くの情報をここで見つけました https://velog.io/@inhwa1025/Chapter-5-3-Rust-메소드methodテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol