[Chapter 5-2]Rust構造例プログラム
長方形の幅を計算するプログラムを作成しましょう.
長方形の幅を計算するには、Cargoで表される長方形の長さと幅を入力します. rectangles という名前の新しいバイナリプロジェクトを作成します.
cargo new rectangles --bin
filename: src/main.rsfn main() {
let length1 = 50;
let width1 = 30;
println!(
"The area of the rectangle is {} square pixels.",
area(length1, width1)
);
}
fn area(length: u32, width: u32) -> u32 {
length * width
}
cargo run
を使用すると、次の結果が得られます.The area of the rectangle is 1500 square pixels.
調整による調整
上記のコードをよりよく変更できます.
area
関数の2つのパラメータは関連しているが、コード内の任意の位置では表現されていない.この点を明確にするには、ブラウスを使用します.fn main() {
let rect1 = (50, 30);
println!(
"The area of the rectangle is {} square pixels.",
area(rect1)
);
}
fn area(dimensions: (u32, u32)) -> u32 {
dimensions.0 * dimensions.1
}
一方、図例には要素の名前がないため、あまり明確ではない場合があります.図例の値にインデックスとしてアクセスする必要があるため、計算が混乱する可能性があります.面積を求めるのではなく、画面に長方形を描くと、問題が発生します.構造体を使用した階層化:意味の追加[こうぞうたいをしよう:いみのついか]
構造体を使用して、データの名前を付け、意味を与えることができます.
struct Rectangle {
length: u32,
width: u32,
}
fn main() {
let rect1 = Rectangle { length: 50, width: 30 };
println!(
"The area of the rectangle is {} square pixels.",
area(&rect1)
);
}
fn area(rectangle: &Rectangle) -> u32 {
rectangle.length * rectangle.width
}
パラメータを持つように、area
関数を変更しました.これは、Rectangle
構造体インスタンスの不変参照者タイプである.構造体の所有権を取得するのではなく、借用する必要があるため、関数呼び出し時に&
はmain
の所有権を維持し、rect1
の使用を継続します.派生traitによる有用な機能の追加
struct Rectangle {
length: u32,
width: u32,
}
fn main() {
let rect1 = Rectangle { length: 50, width: 30 };
println!("rect1 is {}", rect1);
以上のコードは、Rectangle
のインスタンスを出力しようとするコードである.コードを実行すると、エラーには次のメッセージが表示されます.error[E0277]: the trait bound `Rectangle: std::fmt::Display` is not satisfied
構造体を使用する場合: println!
これは、この出力をフォーマットする方法が明確ではないためです.ユーザーがカンマや括弧などを使うかどうかは不明です.Rustはあなたのニーズを推測したくない.次のヘルプは、エラーメッセージから入手できます.
note: `Rectangle` cannot be formatted with the default formatter; try using
`:?` instead if you are using a format string
に適用 println!
呼び出しマクロ println!("rect1 is {:?}", rect1);
という形で使いましょう. { }
私. : ?
次のことを意味します. println!
Debugという出力フォーマットを使用したいことをお伝えします.ただし、変更したコードを実行してもエラーが発生します.
error: the trait bound `Rectangle: std::fmt::Debug` is not satisfied
note: `Rectangle` cannot be formatted using `:?`; if it is defined in your
crate, add `#[derive(Debug)]` or manually implement it
構造体の機能をアクティブにするには、事前に明確に同意しなければならない.#[derive(Debug)]
構文は、構造体定義の前に追加されます.#[derive(Debug)]
struct Rectangle {
length: u32,
width: u32,
}
fn main() {
let rect1 = Rectangle { length: 50, width: 30 };
println!("rect1 is {:?}", rect1);
}
rect1 is Rectangle { length: 50, width: 30 }
println!
スターリング内では{ : ? }
ではなく{ : # ? }
を使用することができる.出力は次のとおりです.rect1 is Rectangle {
length: 50,
width: 30
}
Reference
この問題について([Chapter 5-2]Rust構造例プログラム), 我々は、より多くの情報をここで見つけました https://velog.io/@inhwa1025/Chapter-5-2-Rust-구조체를-이용한-예제-프로그램テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol