我试图在一个可以通过引用变异的特征中获得一个值.问题是String值非常大,可能被许多线程访问,所以我的解决方案看起来像这样:
trait MyTrait {
fn name<'a>(&'a mut self) -> &'a mut String;
}
struct SimpleImpl {
name: String
}
impl MyTrait for SimpleImpl {
fn name<'a>(&'a mut self) -> &'a mut String {
&mut self.name
}
}
use std::sync::{Arc,RwLock};
struct ParallelImpl {
name: Arc<RwLock<String>>
}
impl MyTrait for ParallelImpl {
fn name<'a>(&'a mut self) -> &'a mut String {
self.name.get_mut().unwrap()
}
}
fn main() {
let mut a = SimpleImpl { name: String::from("simple") };
let mut b = ParallelImpl { name: Arc::new(RwLock::new(String::from("parallel"))) };
a.name().as_mut_str();
b.name().as_mut_str();
}
Run Code Online (Sandbox Code Playgroud)
这无法编译
main2.rs:23:9: 23:18 error: cannot borrow immutable borrowed content as mutable
main2.rs:23 self.name.get_mut().unwrap()
Run Code Online (Sandbox Code Playgroud)
为什么我不打电话get_mut()打开Arc和打开RwLock?
| 归档时间: |
|
| 查看次数: |
711 次 |
| 最近记录: |