今天是2021年的第一天,大家新的一年也要好好学习Rust呀~
在很多其他语言中,静态数组虽然是静态的,但是我们却可以“给它在运行时中指定一个动态的长度”。但在Rust中由于数组中的N并不是范型,所以我们无法写出如下的代码:
structFoo {
data: [i32; N]
}
今天我们介绍的generic-array库定义了trait 和结构体,这样我们就可以写出刚才我们想要的等价结构体了:
structFoo {
data: GenericArray
}
其中对于库(一个范型的数值系统)中的无符号数,有默认的实现,因此如果我们可以这样定义一个长度为5的数组
usegeneric_array::typenum::U5;
structFoo {
data: GenericArray
}
fnmain() {
letfoo = Foo::;
}
而基本上就和差不多
usegeneric_array::typenum::U5;
structFoo {
data: GenericArray
}
fnmain() {
letfoo = Foo::;
}
如此一来我们就可以绕开Rust本身的限制,对静态数组的长度使用范型,让它动起来~不过其实Rust 2021发行版本据说就要原生支持这一功能了,大家也可以多多关注。结合本次介绍的的源代码跟一下这个事情~祝大家元旦快乐~
领取专属 10元无门槛券
私享最新 技术干货