Я хотел бы создать структуру, содержащую срез, и может возвращать ссылки на элементы в этом фрагменте. До сих пор я был в состоянии сделать это:Невозможно использовать изменчивый срез, где неизменяемый срез в порядке
pub struct Stride<'a> {
items: &'a [f32],
}
impl<'a> Iterator for Stride<'a> {
type Item = &'a f32;
fn next(&mut self) -> Option<&'a f32> {
Some(&self.items[0])
}
}
Однако, когда я изменяю кусочек быть изменяемым ломтика:
pub struct Stride<'a> {
items: &'a mut [f32],
}
impl<'a> Iterator for Stride<'a> {
type Item = &'a f32;
fn next(&mut self) -> Option<&'a f32> {
Some(&self.items[0])
}
}
Я получаю ошибку компилятора:
test.rs:8:14: 8:28 error: cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
test.rs:8 Some(&self.items[0])
^~~~~~~~~~~~~~
Почему я не могу удерживать этот изменяемый фрагмент и возвращать ссылки на элементы этого среза? Я хотел бы пойти еще дальше: возвращать изменяемые ссылки на элементы в этом фрагменте. Возможно ли это?
Я предполагаю, что вы просите об этом, чтобы изучить, как он будет реализован. Если вы хотите сделать это в The Real World, вы можете просто использовать ['iter_mut'] (http://doc.rust-lang.org/std/slice/trait.SliceExt.html#tymethod.iter_mut) из стандартного библиотека. – Shepmaster