我有这样的自定义特征:
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
实例未被传递到任何其他地方,所以我应该能够在这一行的范围内可变地借用,至少根据我的直觉。