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++ - "pointer not aliased by any other pointer"含义的持续时间是多少?

.net - .NET 中的托管资源与非托管资源。有什么不同?

c - cir.radius 和 (cir.radius) 之间的差异

c struct pointer Seg.fault when malloc()

rust - 为什么我不能使用 `ty` 宏匹配器来构造结构?

rust - 不能对返回 Result<(), error> 的函数使用 `?` 运算符

IOS内存和内存管理

ios - 未调用 dealloc 进行控制

c# - 为什么TimeSpan和Guid Structs可以比作null?

rust - 在浏览器中调试 WebAssembly 时如何查看 Rust 源代码?