Rust学習 #12 構造体2

fuuuu
·

これでarea関数は引数が一つになり、この引数は名前がrectangle、型はRectangle構造体インスタンスへの不変借用になりました。 第4章で触れたように、構造体の所有権を奪うよりも借用する必要があります。こうすることでmainは所有権を保って、 rect1を使用し続けることができ、そのために関数シグニチャと関数呼び出し時に&を使っているわけです。

所有権の兼ね合いがあるので、関数で構造体を利用するならば、 &を利用して借用しないとコンパイラさんに怒られると。

Rustを書いてて思うけど、エラーメッセージがとにかく親切

`Rectangle` doesn't implement `std::fmt::Display`

the trait `std::fmt::Display` is not implemented for `Rectangle`

in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead

拡張機能で明らかなエラーがある場合は、メッセージを表示されるようにしてるが、ここまで出してくれている。メッセージに従い、構造体のprintln出力の{}内の記述を {:?} としてみた

`Rectangle` doesn't implement `Debug`

the trait `Debug` is not implemented for `Rectangle`

add `#[derive(Debug)]` to `Rectangle` or manually `impl Debug for Rectangle`

今度は別のエラー表示。どうやらチュートリアルで作成した Rectangle 構造体には Debug トレイトを使用できる状態ではないよ と。そして今回も解決方法を明示してくれている。エラー文に解決方法までかいてくれるなんて素晴ら!!!

そんな訳で、エラー文の通りに、トレイト利用をするための記述を追加する この記述をトレイト注釈 と記述していた。ふむふむ。

#[derive(Debug)]

struct Rectangle {

 width: u32,

 height: u32,

}

次回は 作成した area 関数を Rectangle 構造体のメソッドとして定義する方法を学ぶ。やっとイメージしやすい話になってきた!