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我的问题有点不同。实际上,数组的大小应该由类型本身推断。