[解決済み] 構造体のフィールドをメソッドから変異させるには?
2022-02-19 05:58:13
質問
こんなことをしたいのですが。
struct Point {
x: i32,
y: i32,
}
impl Point {
fn up(&self) {
self.y += 1;
}
}
fn main() {
let p = Point { x: 0, y: 0 };
p.up();
}
しかし、このコードではコンパイラーエラーが発生します。
error[E0594]: cannot assign to field `self.y` of immutable binding
--> src/main.rs:8:9
|
7 | fn up(&self) {
| ----- use `&mut self` here to make mutable
8 | self.y += 1;
| ^^^^^^^^^^^ cannot mutably borrow field of immutable binding
解決方法は?
を使用する必要があります。
&mut self
の代わりに
&self
を作成し
p
変数がミュータブルであることを示します。
struct Point {
x: i32,
y: i32,
}
impl Point {
fn up(&mut self) {
// ^^^ Here
self.y += 1;
}
}
fn main() {
let mut p = Point { x: 0, y: 0 };
// ^^^ And here
p.up();
}
Rustでは、ミュータビリティは継承されます。データの所有者が、その値をミュータブルにするかどうかを決定します。しかし、参照は所有権を意味しないので、参照自身は不変であることも、変更可能であることもあります。詳しくは オフィシャルブック これらの基本的な概念をすべて説明しています。
関連
-
[解決済み] Rustにはキューとスタックコレクションがありますか?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み] 文字列を追加して印刷するにはどうすればよいですか?
-
[解決済み] Rustのユニットテストでprintln! が動作しないのはなぜ?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
-
[解決済み] ローカルの未公開クレートを使うには?
-
[解決済み】iterとinto_iterの違いは何ですか?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?
-
[解決済み] カスタムステップで範囲を反復処理するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rustにはキューとスタックコレクションがありますか?
-
[解決済み] usize` と `u32` の違いは何ですか?
-
[解決済み] Rustのユニットテストでprintln! が動作しないのはなぜ?
-
[解決済み】文字列をint型に変換する?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] 同じプロジェクトの別のファイルからモジュールをインクルードする方法は?
-
[解決済み] CopyとCloneの違いは何ですか?
-
[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
-
[解決済み】iterとinto_iterの違いは何ですか?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?