如何使用 rust 中的通用数组板条箱初始化通用数组?
How to initialize generic array with generic-array crate in rust?
我使用 generic-array 板条箱:
struct Foo<N: ArrayLength<i32>> {
data: GenericArray<i32, N>
}
但是没有说明如何初始化值:
impl<N: ArrayLength<i32>> Foo<N> {
pub fn new() -> Self {
Self {
data: // What to puts here?
}
}
}
Playground here 帮助测试人员。
你可以默认初始化并在之后改变它们:
let mut data = GenericArray::default();
for x in &mut data {
*x = 33;
}
或者您可以使用GenericArray::from_exact_iter
功能。问题是似乎没有一种简单的方法来创建同时实现 ExactSizeIterator
的 n
元素的迭代器。你可以实现一个:
struct RepeatN<T>{
item: T,
count: usize,
}
impl<T: Clone> Iterator for RepeatN<T> {
type Item = T;
fn next(&mut self) -> Option<T> {
self.count.checked_sub(1).map(|count| {
self.count = count;
self.item.clone()
})
}
fn size_hint(&self) -> (usize, Option<usize>) {
(self.count, Some(self.count))
}
}
impl<T: Clone> ExactSizeIterator for RepeatN<T> {
fn len(&self) -> usize {
self.count
}
}
fn repeat_n<T: Clone>(item: T, count: usize) -> RepeatN<T> {
RepeatN {
item,
count,
}
}
并像 GenericArray::from_exact_iter(repeat_n(33, N::to_usize())).unwrap()
一样使用它。
我使用 generic-array 板条箱:
struct Foo<N: ArrayLength<i32>> {
data: GenericArray<i32, N>
}
但是没有说明如何初始化值:
impl<N: ArrayLength<i32>> Foo<N> {
pub fn new() -> Self {
Self {
data: // What to puts here?
}
}
}
Playground here 帮助测试人员。
你可以默认初始化并在之后改变它们:
let mut data = GenericArray::default();
for x in &mut data {
*x = 33;
}
或者您可以使用GenericArray::from_exact_iter
功能。问题是似乎没有一种简单的方法来创建同时实现 ExactSizeIterator
的 n
元素的迭代器。你可以实现一个:
struct RepeatN<T>{
item: T,
count: usize,
}
impl<T: Clone> Iterator for RepeatN<T> {
type Item = T;
fn next(&mut self) -> Option<T> {
self.count.checked_sub(1).map(|count| {
self.count = count;
self.item.clone()
})
}
fn size_hint(&self) -> (usize, Option<usize>) {
(self.count, Some(self.count))
}
}
impl<T: Clone> ExactSizeIterator for RepeatN<T> {
fn len(&self) -> usize {
self.count
}
}
fn repeat_n<T: Clone>(item: T, count: usize) -> RepeatN<T> {
RepeatN {
item,
count,
}
}
并像 GenericArray::from_exact_iter(repeat_n(33, N::to_usize())).unwrap()
一样使用它。