我有以下结构
struct Sudoku {
field: [[u32; 9]; 9]
}
如果我像这样初始化它 let su: Sudoku;
一切似乎都很好,但是使用结构的方法给我这个错误 ^^ use of possibly uninitialized 'method'
。所以我尝试用这样的数组初始化结构 let su: Sudoku{field: [[u32; 9]; 9]};
这给了我这个错误
98 | let su: Sudoku{field: [[u32; 9]; 9]};
| ^ expected one of 7 possible tokens here
所以我心里有两个问号。首先,通常如何在结构中使用固定大小的数组并正确初始化它们。为什么我无论如何都需要初始化固定大小的数组,它们不是用于在内存中自动清零的基元吗?
最佳答案
使用结构体初始化变量时,您必须使用等号,就像任何其他赋值一样。
所以首先,我们应该添加一个等号。放置有两种选择:
// 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 语法,您就会知道 { ... }
在几乎任何情况下都可以作为 block 语法使用。一个异常(exception)是在初始化结构时,在这种情况下,左括号必须紧跟在结构的类型之前。
因此,B 更正确。让我们修复最后一个错误,它告诉您将类型替换为值以使其工作。
let su = Sudoku { field: [[0; 9]; 9] };
你可以在那里使用任何值,多维数组中的每个元素都将被它填充。
( Playground )
关于memory-management - 如何使用固定大小的数组作为成员元素初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56960908/