Оказывается, что итератор ChunksMut
дает срезы.Я не уверен, как извлечь это из документации.Я понял это, прочитав источник :
#[derive(Debug)]
#[stable(feature = "rust1", since = "1.0.0")]
pub struct ChunksMut<'a, T:'a> {
v: &'a mut [T],
chunk_size: usize
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<'a, T> Iterator for ChunksMut<'a, T> {
type Item = &'a mut [T];
#[inline]
fn next(&mut self) -> Option<&'a mut [T]> {
if self.v.is_empty() {
None
} else {
let sz = cmp::min(self.v.len(), self.chunk_size);
let tmp = mem::replace(&mut self.v, &mut []);
let (head, tail) = tmp.split_at_mut(sz);
self.v = tail;
Some(head)
}
}
Я думаю, это просто опыт;другим должно быть очевидно, что итератор типа ChunksMut<T>
из Vec<T>
возвращает объекты типа [T]
.Это имеет смысл сейчас.Это просто было не очень понятно с промежуточной структурой.
pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<T>
// ...
impl<'a, T> Iterator for ChunksMut<'a, T>
Читая это, выглядело, как итератор возвращал объекты типа T
, такие же как Vec<T>.iter()
, что не имело бы смысла.