今天是2021年的第一天,大家新的一年也要好好学习Rust呀~
在很多其他语言中,静态数组虽然是静态的,但是我们却可以“给它在运行时中指定一个动态的长度”。但在Rust中由于数组[T; N]
中的N并不是范型,所以我们无法写出如下的代码:
struct Foo<N> {
data: [i32; N]
}
今天我们介绍的generic-array库定义了trait ArrayLength<T>
和结构体GenericArray<T, N: ArrayLength<T>>
,这样我们就可以写出刚才我们想要的等价结构体了:
struct Foo<N: ArrayLength<i32>> {
data: GenericArray<i32, N>
}
其中对于typenum
库(一个范型的数值系统)中的无符号数,ArrayLength<T>
有默认的实现,因此如果我们可以这样定义一个长度为5的数组
use generic_array::typenum::U5;
struct Foo<N: ArrayLength<i32>> {
data: GenericArray<i32, N>
}
fn main() {
let foo = Foo::<U5>{data: GenericArray::default()