Rust 如何使用从变量';s型?

Rust 如何使用从变量';s型?,rust,Rust,我有一个数组的自定义类型,我想初始化该类型的变量。它看起来像这样: type Registers = [u8; 16]; fn main() { let mut registers: Registers; } 我不想执行以下操作,因为在某些情况下,我可能希望更改数组类型的大小: let mut registers: Registers = [0; 16]; 有没有办法只用类型的名称来初始化变量?我是否必须像上面那样指定初始化 我的问题有点不同,因为数组的大小应该从类型本身推断,而不

我有一个数组的自定义类型,我想初始化该类型的变量。它看起来像这样:

type Registers = [u8; 16];

fn main() {
    let mut registers: Registers;
}
我不想执行以下操作,因为在某些情况下,我可能希望更改数组类型的大小:

let mut registers: Registers = [0; 16];
有没有办法只用类型的名称来初始化变量?我是否必须像上面那样指定初始化


我的问题有点不同,因为数组的大小应该从类型本身推断,而不是从值推断的数组类型。

不能推断数组的长度,因为它是一个必须在编译时计算的表达式。据我所知,“推断表达式”的概念毫无意义

我可能想更改数组类型的大小

通过引入常数,可以避免这一问题:

const N_REGISTERS: usize = 16;
type Registers = [u8; N_REGISTERS];

fn main() {
    let mut registers: Registers = [0; N_REGISTERS];
}
您也可以使用数组的
Default
实现,但仅适用于且仅适用于需要数组元素类型的默认值的情况:

type Registers = [u8; 16];

fn main() {
    let mut registers = Registers::default();
}

无法推断数组的长度,因为它是一个必须在编译时计算的表达式。据我所知,“推断表达式”的概念毫无意义

我可能想更改数组类型的大小

通过引入常数,可以避免这一问题:

const N_REGISTERS: usize = 16;
type Registers = [u8; N_REGISTERS];

fn main() {
    let mut registers: Registers = [0; N_REGISTERS];
}
您也可以使用数组的
Default
实现,但仅适用于且仅适用于需要数组元素类型的默认值的情况:

type Registers = [u8; 16];

fn main() {
    let mut registers = Registers::default();
}
只要不可用,
默认值
将不会对所有阵列类型实施。正如您所经历的那样,这使得阵列初始化不太符合人体工程学

作为一种常用的替代方法,您可以将类型别名转换为新类型,使用该类型可以将数组初始化隔离到代码中的单个点

pub struct Registers(pub [u8; 16]);

impl Default for Registers {
    fn default() -> Self {
        Registers([0; 16])
    }
}
此时,根据您的用例,您还可以实现此类型的其他有用特性,例如
AsRef
AsMut

impl AsRef用于寄存器{
fn作为参考(&self)->和[u8]{
self.0.as_ref()
}
}
只要不可用,
默认值将不会对所有阵列类型实施。正如您所经历的那样,这使得阵列初始化不太符合人体工程学

作为一种常用的替代方法,您可以将类型别名转换为新类型,使用该类型可以将数组初始化隔离到代码中的单个点

pub struct Registers(pub [u8; 16]);

impl Default for Registers {
    fn default() -> Self {
        Registers([0; 16])
    }
}
此时,根据您的用例,您还可以实现此类型的其他有用特性,例如
AsRef
AsMut

impl AsRef用于寄存器{
fn作为参考(&self)->和[u8]{
self.0.as_ref()
}
}

我相信这个问题已经有人回答了。如果你不同意,请用你的问题来解释不同之处。@Shepmaster我的问题有点不同。从本质上说,数组的大小应该由类型本身来推断。我相信这个问题已经由解决了。如果你不同意,请用你的问题来解释不同之处。@Shepmaster我的问题有点不同。实际上,数组的大小应该由类型本身推断。