Rustの型エラーで二次元配列が書き換えられない
最近Rustを学び始めて,現在以下のようなコードを書いています.
static TABLE:[[u8; 4]; 4] =[
[ 3, 6, 7, 14],
[ 1, 11, 13, 5],
[ 8, 2, 4, 9],
[10, 15, 0, 12]
];
fn main() {
let mut input: [[u8; 2]; 4] = [[4, 8], [3, 10], [9, 1], [0, 3]];
let output = func(input, TABLE);
for row in output.iter() {
for data in row.iter() {
println!("{}", data);
}
}
}
fn func(input:[[u8; 2]; 4], table:[[u8; 4]; 4]) -> [[u8; 2]; 4] {
let mut t = input.clone();
for i in t.iter() {
for j in i.iter() {
let y = j % 4;
let x = (j - y) / 4;
j = table[x as usize][y as usize].clone();
}
}
t;
}
funcは,二次元配列inputの要素の値(Z)から二次元配列tableの座標(X, Y)を算出して,Zをその値に書き換えた配列を新たに返すという関数です.
これをコンパイルしようとすると以下のエラーでコンパイルに失敗します.
src/main.rs:24:17: 24:54 error: mismatched types:
expected&u8
, foundu8
(expected &-ptr, found u8) [E0308]
src/main.rs:24 j = table[x as usize][y as usize].clone();
j は t[〜][〜] の値の参照で,それを書き換えることによって t にそれが反映されることを期待していたのですが,そのやり方が間違っているようで悩んでいます.
ちなみに以下のような出力を期待しています.
1
8
14
4
2
6
3
14
どのようにすればこのような出力を得られるでしょうか?