У меня есть индивидуальная черта, подобная этой:
pub struct SomeObject;
pub trait Renderer {
fn render(&self) -> Vec<SomeObject>;
}
и модуль с несколькими структурами, реализующими указанную черту. Модуль предоставляет одну функцию:
mod renderer {
use super::*;
pub fn all() -> Vec<Box<Renderer>> {
vec![]
}
}
который используется в основной функции следующим образом:
fn main() {
let renderers = renderer::all();
loop {
// ...
let objects: Vec<SomeObject> = renderers.iter().flat_map(|r| r.render()).collect();
// ...
}
}
Это работает хорошо до сих пор.
Теперь мне нужно изменить метод render()
, чтобы получить изменяемую ссылку на self
. Это дает следующую ошибку:
error[E0596]: cannot borrow immutable `Box` content `**r` as mutable
--> src/main.rs:20:74
|
20 | let objects: Vec<SomeObject> = renderers.iter().flat_map(|r| r.render()).collect();
| ^ cannot borrow as mutable
Как я могу это исправить? Экземпляр renderers
не используется для передачи в какое-либо другое место, поэтому я должен иметь возможность заимствовать изменчиво в рамках этой строки, по крайней мере, согласно моей интуиции.
iter_mut()
- person Shepmaster   schedule 08.01.2018