Grid::new
应该初始化Grid::inner
使用嵌套的固定大小数组文字,其编写方式与类型类似,但使用要用来初始化数组的值来代替Cell
type:
impl Grid {
fn new -> Grid {
Grid { inner: [[alive, ..GRID_SIZE], ..GRID_SIZE] }
}
}
(您可以使用Cell::new()
代替alive
如果您更愿意使用构造函数。)
The 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 中,本例中使用的嵌套数组是固定大小数组的一种特殊情况。
要了解其工作原理,请参阅教程部分向量和字符串 http://static.rust-lang.org/doc/master/tutorial.html#vectors-and-strings。特别是,与向量(类型~[T]
),它们在堆上动态分配并且可以更改其长度(如果它们是可变的),固定大小数组的长度嵌入在类型中([T, ..LENGTH]
),这样它们在创建后就不能改变大小。T
本身必须是固定大小类型或指针。然而,作为交换,固定大小的数组是可以直接在堆栈上分配的值类型,嵌入在struct
定义(如Grid
), etc.
由于固定大小数组本身就是固定大小类型,因此嵌套固定大小数组只是一种特殊情况,其中固定大小数组是固定大小数组的元素类型。特别是,占用的内存Grid::inner
正是GRID_SIZE * GRID_SIZE * sizeof(Cell)
(如果我们忽略对齐)。固定大小数组的向量也很有用~[T, ..LENGTH]
,当您知道矩阵中的列数但不知道行数时。
如果参数是切片(类型&[T]
).
从现在到 Rust 1.0 发布,一些细节可能会发生变化。如果你好奇的话,搜索一下Rust Reddit 子版块 http://reddit.com/r/rust对于“动态大小的类型”应该显示建议的更改及其背后的原因,或者您可以随时在 Reddit 或 #rust IRC 频道上询问。