я не могу получить этот код, чтобы скомпилировать:«несоответствие типов» в то время как цикл над 2D массива
fn main() {
let grid: [[Option<i32>;2];2] = [
[Some(1),Some(2)],
[None,Some(4)],
];
for row in grid.iter() {
for v in row.iter() {
match v {
Some(x) => print!("{}", x),
None => print!(" "),
}
}
print!("\n");
}
}
Я получаю сообщение об ошибке
Compiling array-2d v0.1.0 (file:///Users/paul/src/test/rust/array-2d)
src/main.rs:8:5: 13:6 error: type mismatch resolving `<core::slice::Iter<'_, core::option::Option<i32>> as core::iter::Iterator>::Item == core::option::Option<_>`:
expected &-ptr,
found enum `core::option::Option` [E0271]
src/main.rs: 8 for v in row.iter() {
src/main.rs: 9 match v {
src/main.rs:10 Some(x) => print!("{}", x),
src/main.rs:11 None => print!(" "),
src/main.rs:12 }
src/main.rs:13 }
src/main.rs:8:5: 13:6 note: in this expansion of for loop expansion
src/main.rs:7:3: 15:4 note: in this expansion of for loop expansion
src/main.rs:8:5: 13:6 help: run `rustc --explain E0271` to see a detailed explanation
error: aborting due to previous error
Could not compile `array-2d`.
Может кто-то интерпретировать, что сказать мне, что Я поступаю неправильно?
Обратите внимание, что стиль ржавчины - это 4-х сторонние отступы. Кроме того, аннотация типа не требуется, пробелы появляются после запятых, и вы обычно видите 'for x in & collection'. [Пример] (http://is.gd/NnGUDw). – Shepmaster
Можете ли вы объяснить, почему 'for row in & grid' позволяет мне оставить символ' .iter() '? –
Убедитесь, что вы знакомы с разделами [* Язык программирования ржавчины *] (http://doc.rust-lang.org/stable/book) в [итераторах] (http://doc.rust-lang.org/ stable/book/iterators.html) и [петли] (http://doc.rust-lang.org/stable/book/loops.html). Недостающая часть состоит в том, что выражение цикла for for должно соответствовать ['IntoIterator'] (https://doc.rust-lang.org/std/iter/trait.IntoIterator.html), которое автоматически вызывается. Вы заметите, что «IntoIterator» реализован для ссылок на массивы и срезы. – Shepmaster