我有一个关于在rust上使用类型的问题。我有一个类型为&mut Peekable<I>
的值,我想将其用作其他函数的输入值,而该函数将获得类型为&[u8]
的值。如何更改其类型?
&[u8]
是在内存中连续排列的字节切片。所以您有两个问题:
I
可以是任何东西。假设您是从通用上下文(如I
)中获得的foo<I: Iterator>()
,则需要确保迭代器提供u8
或可转换为u8
的内容。Peekable
后面的数据不必存在于内存中。可以从例如(0..1000)
的范围创建,也可以在HashMap
上迭代,该数据具有以随机方式散布的数据。您需要将其复制到可以保证连续布局的向量中。
u8
声明要使用where I: Iterator<Item=u8>
,或要求使用u8
将类型转换为where I: Iterator<Item=impl Into<u8>>
。然后,您将可以执行let iterator = iterator.map(|el| el.into())
以获得u8
元素的迭代器。 一旦有了,就可以将它们收集到一个向量中,并从中得到一个向量的切片:
let vec: Vec<u8> = iterator.collect();
let slice = &vec[..];