memo.log

技術情報の雑なメモ

2024-05-01から1ヶ月間の記事一覧

構造体が持っている配列の各要素の参照ベクターにして返す

以下のようにすることで、配列で持っている各要素の値を呼び出し側で変更できる #[derive(Debug)] struct Grid( [Cell; 3] ); impl Grid { fn get_cells2(&mut self) -> Vec<&mut Cell>{ return self.0.iter_mut().collect(); } } #[derive(Debug)] struct C…

構造体で、メンバが構造体の要素を外から変更するサンプル

struct Grid( Cell ); impl Grid { fn get_cell(&mut self) -> &mut Cell{ return &mut self.0; } } struct Cell( i32 ); fn main() { let mut grid = Grid(Cell(1)); println!("{:?}", grid.0.0); let cell = grid.get_cell(); *cell = Cell(100); println!…

構造体の可変参照、不変参照

// 構造体 struct Test1{ number1: i32, number2: i32 } impl Test1 { // `&self` だと不変参照のため、代入しようとするとエラーになる // cannot assign to `self.number1`, which is behind a `&` reference // `self` is a `&` reference, so the data i…

構造体のサンプルメモ

// 構造体 struct Test1{ number1: i32, number2: i32 } // タプル構造体 // フィールド名は無し struct Test2( i32, i32 ); fn main() { let test1 = Test1 { number1: 1, number2: 2 }; // . でアクセス println!("{:?}", test1.number1); // 1 let test2 …

所有権のメモ

let d = String::from("d"); let e = d; let f = d; // エラー。 変数 d は所有権を失っているため let g = &d; // 参照を渡すか、 let h = d.clone(); // clone() する let arr = [String::from("a")]; let ar = arr[0]; //配列のインデックスでデータを取…

[Rust] 配列から直接非Copy Trait の要素の所有権の移動はできない =インデックスを用いて

以下の場合にエラーが出るのがよく分からなかった。 非CopyTrait のデータが配列の要素の場合に、インデックスを用いて参照できない。 let arr = [String::from("a")]; let ar = arr[0]; // cannot move out of here // move occurs because `arr[_]` has ty…

[Rust]関数の戻り値とセミコロンについてのサンプルメモ

// 戻り値がない関数定義の場合、空のタプルと同じになる。 // つまり、以下の2つは同じ fn test1a() { } fn test1b() -> () { } // 戻り値を指定させる方法は2つ // 1. return キーワードとセミコロンをつけて返す // 2. return キーワードを使わずセミコ…

所有権とかCopy, Cloneとか

以下だと、Testの get_name ではエラーになるけど、 Test2のget_age はエラーにならない。 cannot move out of self.name which is behind a shared reference move occurs because self.name has type String, which does not implement the Copy trait str…