Rustのstruct
/mrsekut-book-4873118557/214 (第9章 構造体)
/mrsekut-book-4297105594/221 (5-3-2 構造体 (struct))
/mrsekut-book-4297105594/229 (5-3-4 構造体と列挙型のより詳しい情報)
#wip
特徴
メソッドを生やせる
命名
構造体名はCamelCase
フィールド名はsneak_case
種類
名前付きフィールド構造体
個々の要素に名前を与える
code:rs
struct GrayscaleMap {
pixels: Vec<u8>,
size: (usize, usize),
}
/mrsekut-book-4873118557/214 (第9章 構造体)
タプル構造体
順番で構成要素を指定する
code:rs
struct Bounds(usize, usize)
/mrsekut-book-4297105594/225
/mrsekut-book-4873118557/217 (9.2 タプル型構造体)
ユニット構造体
要素なし
code:rs
struct UniqueValue;
/mrsekut-book-4297105594/226 (5-3-3 列挙型 (enum))
/mrsekut-book-4873118557/218 (9.3 ユニット型構造体)
初期化
/mrsekut-book-4297105594/222
update
/mrsekut-book-4297105594/223
functional record update syntax
implでメソッドを生やす
/mrsekut-book-4873118557/219 (9.5 implによるメソッド定義)
メソッドの第一引数はself
この型は自明なので、基本省略する
self: Hoge-省略→self
self: &Hoge-省略→&self
self: &mut Hoge-省略→&mut self
code:rs
impl VendingMachine {
// static method. selfを引数に取らない
fn new() -> Self {
VendingMachine {
drinks: Vec::new(),
cash_balance: 0,
}
}
// 通常のmethod. 第一引数はself
fn add_drink(&mut self, drink: Drink) {
self.drinks.push(drink);
}
}
genericsを用いた構造体
code:rs
struct Queue<T> {
older: Vec<T>,
younger: Vec<T>,
}
生存期間パラメータを持たせる
code:rs
struct Exrema<'elt> {
greatest: &'elt i32,
least: &'elt i32,
}
/mrsekut-book-4873118557/222 (9.6 ジェネリック構造体)
/mrsekut-book-4873118557/224 (9.7 是依存期間パラメータを持つ構造体)
/mrsekut-book-4873118557/225 (9.8 一般的なトレイトの自動実装)
/mrsekut-book-4873118557/226 (9.9 内部可変性)
https://ryochack.hatenablog.com/entry/2018/03/23/184943