Rust “奇怪”;借来的价值活得不够长。”;仿制药

Rust “奇怪”;借来的价值活得不够长。”;仿制药,rust,lifetime,borrow-checker,Rust,Lifetime,Borrow Checker,这段简单的代码快把我逼疯了: pub fn load_any, K:'a+kv::KeyI修改代码如下: pub fn load_any(&self,key:K)->结果在哪里 T:Persistent+Debug+Serialize+for, K:因为, { 让bucket=self.store.bucket::(Some(T::bucket_name())?; 水桶 .get(键)?.unwrap(); Ok(无) } 我甚至在T定义中使用了“终身”这个词。 我猜这会使编译“忽略”键的生存

这段简单的代码快把我逼疯了:

pub fn load_any,

K:'a+kv::KeyI修改代码如下:

pub fn load_any(&self,key:K)->结果在哪里
T:Persistent+Debug+Serialize+for,
K:因为,
{
让bucket=self.store.bucket::(Some(T::bucket_name())?;
水桶
.get(键)?.unwrap();
Ok(无)
}
我甚至在
T
定义中使用了“终身”这个词。 我猜这会使编译“忽略”键
的生存期,因为它不是借用的,所以不需要它

但现在的问题是使用以下方法:

错误:“kv::types::Key”的实现不够通用
-->src/main.webapp.rs:146:30
|
146 | println!(“{:?}”,persist.load::(“qqq”);
|“`kv::types::Key`的实现不够通用
| 
::/opt/rust/registry/src/github.com-1ec6299db9ec823/kv-0.22.0/src/types.rs:7:1
|
7 |/pub特征关键结果;
10  | |
...   |
14  | |     }
15  | | }
|||-trait`kv::types::Key`在此处定义
|

=注意:`kv::types::key您能将您的解决方案转化为答案吗?通过这种方式,它将适合本网站的问答结构,并且更易于阅读/投票/所有内容都只接受与其生命周期相关的
键,但由于
'A通过
在函数外部派生的
将始终比函数内部定义的
bucket
寿命更长,编译器试图使自己向后弯曲以使其工作。我没有一个解决方案,因为解决方法通常是前面的
:前面的

  --> src/persist.rs:47:9
   |
42 |       pub fn load_any<'a, T, K>(&self, key: K) -> Result<Option<T>, kv::Error> where
   |                       -- lifetime `'a` defined here
...
47 |           bucket
   |           -^^^^^
   |           |
   |  _________borrowed value does not live long enough
   | |
48 | |             .get(key)?.unwrap();
   | |_____________________- argument requires that `bucket` is borrowed for `'a`
...
51 |       }
   |       - `bucket` dropped here while still borrowed