При инициализации переменной с помощью структуры вы должны использовать знак равенства, как и при любом другом присваивании.
Итак, прежде всего, мы должны добавить знак равенства.Существует два варианта размещения:
// A
let su: Sudoku = { field: [[u32; 9]; 9] };
// B
let su = Sudoku { field: [[u32; 9]; 9] };
Оба будут по-прежнему давать ошибку, но по разным причинам.
// A
error[E0425]: cannot find value `field` in this scope
--> src/main.rs:7:24
|
7 | let su: Sudoku = { field: [[u32; 9]; 9] };
| ^^^^^
| |
| not found in this scope
| expecting a type here because of type ascription
error[E0308]: mismatched types
--> src/main.rs:7:24
|
7 | let su: Sudoku = { field: [[u32; 9]; 9] };
| ^^^^^^^^^^^^^^^^^^^^ expected struct `Sudoku`, found array of 9 elements
|
= note: expected type `Sudoku`
found type `[[u32; 9]; 9]`
// B
error[E0423]: expected value, found builtin type `u32`
--> src/main.rs:7:32
|
7 | let su = Sudoku { field: [[u32; 9]; 9] };
| ^^^ not a value
Если вы знаете синтаксис Rust, вы знаете, что { ... }
допустим как блоксинтаксис практически в любой ситуации.Единственное исключение - при инициализации структуры, в этом случае открывающей скобке должен предшествовать тип структуры.
Итак, B более корректно.Давайте исправим последнюю ошибку, которая говорит вам заменить тип значением, чтобы он работал.
let su = Sudoku { field: [[0; 9]; 9] };
Вы можете использовать любое значение там, каждый элемент в многомерном массиве будетзаполнено им.
( Детская площадка )