如何在结构中初始化此数组数组?

短的

我正在尝试从本教程中学习防锈功能。我认为Conway的生活游戏将是一个不错的起点。

我在理解如何编写Grid :: new()fn时遇到麻烦。

这是我到目前为止的内容:

enum Cell {
    alive, dead
}
impl Cell {
    fn new() -> Cell {
        alive
    }
struct Grid {
    priv inner: [ [Cell, .. GRID_SIZE], .. GRID_SIZE],
}

impl Grid {
    fn new() {
        Grid { inner: ???? }
    }
}

...

fn main () {
    let grid = Grid::new(); // Stack allocated grid (internal stack allocad array)
}

我想要的是使用所有“ alive”值的单元格初始化网格。

菱角菌属

Grid::new应该Grid::inner使用嵌套的固定大小的数组常量来初始化,该常量的写法与类型一样,但是要使用用于初始化数组的值代替Cell类型:

impl Grid {
    fn new -> Grid {
        Grid { inner: [[alive, ..GRID_SIZE], ..GRID_SIZE] }
    }
}

如果希望使用构造函数Cell::new()alive可以使用代替。)

inner然后可以在表达式中使用成员,如下所示(请注意,priv仅控制对当前模块外部代码的可见性):

let grid = Grid::new();
let nested_fixed_sized_array: [[Cell, ..GRID_SIZE], ..GRID_SIZE] = grid.inner;
let fixed_sized_array: [Cell, ..GRID_SIZE] = grid.inner[0];
let cell_element: Cell = grid.inner[0][0];

在Rust中,本示例中使用的嵌套数组是固定大小数组的一种特殊情况。要了解它是如何工作的,请参见Vectors和Strings的教程部分特别是,与向量(类型~[T]不同,向量在堆上动态分配并且可以更改其长度(如果它们是可变的),固定大小的数组的长度嵌入在类型([T, ..LENGTH])中,因此它们不能创建后更改大小。T本身必须是固定大小的类型或指针。作为交换,固定大小的数组是可以直接在堆栈上分配,嵌入在struct定义(如Grid)等中的值类型

由于固定大小数组本身就是固定大小类型,因此嵌套固定大小数组只是一种特殊情况,其中固定大小数组是固定大小数组的元素类型。特别是,如果(我们忽略对齐)占用的内存Grid::inner是精确的GRID_SIZE * GRID_SIZE * sizeof(Cell)~[T, ..LENGTH]当您知道矩阵中的列数但不知道行数时,固定大小数组的向量也很有用

如果向量和固定大小的数组都是slice(类型&[T]),则它们都可以用作函数参数

从现在到Rust 1.0的发行版之间,某些细节可能会发生变化。如果您感到好奇,可以在Rust子目录中搜索“动态大小类型”,以查看拟议的更改及其背后的原因,或者您随时可以在Reddit或#rust IRC频道上询问一下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章