Memory management 如何使用固定大小的数组作为成员元素初始化结构?

Memory management 如何使用固定大小的数组作为成员元素初始化结构?,memory-management,struct,rust,Memory Management,Struct,Rust,我有以下结构 struct数独{ 字段:[[u32;9];9] } 如果我像这样初始化它让su:Sudoku一切似乎都正常,但使用结构的方法会导致此错误^^使用可能未初始化的“方法”。因此,我尝试使用如下数组初始化结构:let su:Sudoku{field:[[u32;9];9]}这给了我这个错误 98 |让su:Sudoku{field:[u32;9];9]}; |^此处应为7种可能的代币之一 所以我有两个疑问。首先,通常我如何在结构中使用固定大小的数组并正确初始化它们。为什么我需要初始

我有以下结构

struct数独{
字段:[[u32;9];9]
}
如果我像这样初始化它
让su:Sudoku一切似乎都正常,但使用结构的方法会导致此错误
^^使用可能未初始化的“方法”
。因此,我尝试使用如下数组初始化结构:
let su:Sudoku{field:[[u32;9];9]}这给了我这个错误

98 |让su:Sudoku{field:[u32;9];9]};
|^此处应为7种可能的代币之一

所以我有两个疑问。首先,通常我如何在结构中使用固定大小的数组并正确初始化它们。为什么我需要初始化固定大小的数组,它们在内存中的原语不是自动为空吗?

使用结构初始化变量时,必须使用等号,就像任何其他赋值一样

首先,我们应该加一个等号。有两个放置选项:

// A
let su: Sudoku = { field: [[u32; 9]; 9] };
// B
let su = Sudoku { field: [[u32; 9]; 9] };
两者都会出错,但原因不同

/A
错误[E0425]:在此范围内找不到值'field'
-->src/main.rs:7:24
|
7 |让su:Sudoku={field:[u32;9];9]};
|                        ^^^^^
|                        |
|未在此范围内找到
|由于类型归属,此处应为类型
错误[E0308]:类型不匹配
-->src/main.rs:7:24
|
7 |让su:Sudoku={field:[u32;9];9]};
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期
|
=注意:应为'Sudoku'类型`
找到类型“[[u32;9];9]`
//B
错误[E0423]:预期值,找到内置类型`u32`
-->src/main.rs:7:32
|
7 |让su=数独{field:[u32;9];9]};
|^^^不是一个值
如果您知道Rust语法,您就知道在几乎任何情况下,
{…}
作为块语法都是有效的。一个例外是初始化结构时,在这种情况下,左括号前面必须紧跟结构的类型

因此,B更为正确。让我们修复最后一个错误,它告诉您用一个值替换类型以使其工作

let su = Sudoku { field: [[0; 9]; 9] };
您可以在那里使用任何值,多维数组中的每个元素都将被它填充

()