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

标签 memory-management struct rust

我有以下结构

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/

相关文章:

c - 如何跨进程共享ck_list?

c - C 中的动态内存与结构体

.net - 如何减少 WPF 应用程序的内存使用量

C++:关于重载 operator new 的一般想法

iphone - 我应该在 iPhone 操作系统中 -drain 或 -release 一个自动释放池吗?

c - 具有带符号整数位字段的结构产生负输出

rust - 枚举中的条件编译

rust - 在其他结构中存储结构的引用

rust - 为什么生命周期规则有利于字符串文字?

assembly - 内存寄存器如何用于保存不同的类型?