我正在尝试在可变结构周围使用 RwLock,但我无法编译它,我不知道为什么。
这是一个最小的代码示例:
use std::sync::RwLock;
use lru::LruCache;
fn main() {
let mut cache: LruCache<String,String> = LruCache::new(100);
cache.put("test".to_string(), "test_value".to_string());
let lock_cache = RwLock::new(cache);
let rc = lock_cache.read();
let res = rc.unwrap().get("test");
assert_eq!(res.unwrap().as_str(), "test_value");
}
whereLruCache
来自外部 Rust 板条箱(但我认为它在问题中没有特定作用)。编译器抱怨此消息:
error[E0596]: cannot borrow data in a dereference of `RwLockReadGuard<'_, LruCache<String, String>>` as mutable
--> tests/cache_test.rs:295:15
|
295 | let res = rc.unwrap().get("test");
| ^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `RwLockReadGuard<'_, LruCache<String, String>>`
我检查了文档RwLock
,虽然RwLockWriteGuard
确实实现了DerefMut
,RwLockReadGuard
但没有。
我对 Rust 很陌生,所以我很确定我做错了什么。有没有办法解决DerefMut
必需但未实现的编译器错误?
编辑我更改了代码,以便可以从主文件轻松执行。