Rustにおいて、配列に可変参照を要素として持たせて、それらを一斉に変更させるようなコードを書きたいと思っています。
以下のコードはコンパイルが通りました。(rustc 1.38.0)
Rust
1fn main() { 2 let mut a = 1; 3 let mut b = 2; 4 let c = [&mut a, &mut b]; 5 add1s(c); 6 println!("{}, {}", a, b); // => 2, 3 7} 8 9fn add1s(c: [&mut i32; 2]) { 10 *c[0] += 1; 11 *c[1] += 1; 12}
このadd1s
の中身をfor文
またはイテレータに対するfor_each(){...}
に置き換えたいのですが、試しに
Rust
1fn add1s(c: [&mut i32; 2]) { 2 // *c[0] += 1; 3 // *c[1] += 1; 4 for x in c.iter() { 5 **x += 1; 6 } 7}
としてみると、
Rust
1 | 214 | for x in c.iter() { 3 | - help: consider changing this to be a mutable reference: `&mut &mut i32` 415 | **x += 1; 5 | ^^^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written
と言われてしまいます。*x
はa, b
への可変参照になるので参照はずしの**x
で中身を書き換えられると思ったのですが、エラーの原因はx
自体は可変参照でなく、ただの参照なので、中身を書き換えられないということのようです。
要するにfor文でIterator要素を可変で取り出すことはできないということなのでしょうか。
回避方法(*c[0] = ...; *c[1] = ...;
のように要素ごとに書く必要がない方法)がありましたら、ご教示いただけたら幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/22 10:17
2019/11/26 12:12