Rust 使用泛型Fn trait/值返回对泛型类型的引用
我刚开始学习生锈,并在生锈的书中学习。其中一章介绍了一些示例,并以“尝试使这种通用”类型的建议练习结束。我在这件事上一直很生气。您开始使用的半泛型类型如下:Rust 使用泛型Fn trait/值返回对泛型类型的引用,rust,closures,lifetime,borrow-checker,ownership-semantics,Rust,Closures,Lifetime,Borrow Checker,Ownership Semantics,我刚开始学习生锈,并在生锈的书中学习。其中一章介绍了一些示例,并以“尝试使这种通用”类型的建议练习结束。我在这件事上一直很生气。您开始使用的半泛型类型如下: struct Cacher<T> where T: Fn(i32) -> i32 { value: Option<i32>, // leaving out rest for brevity 结构缓存器 其中T:Fn(i32)->i32 { 价值:期权, //为简洁起见,省略了其余部分
struct Cacher<T>
where T: Fn(i32) -> i32
{
value: Option<i32>,
// leaving out rest for brevity
结构缓存器
其中T:Fn(i32)->i32
{
价值:期权,
//为简洁起见,省略了其余部分
然后我开始转换它,使Fn特征也是通用的,这也直接影响“价值”
struct Cacher<T, U>
where T: Fn(U) -> U
{
calculation: T,
value: Option<U>,
}
impl<T, U> Cacher<T, U>
where T: Fn(U) -> U
{
fn new(calculation: T) -> Cacher<T, U> {
Cacher {
calculation,
value: Option::None,
}
}
fn value(&mut self, arg: U) -> &U {
match self.value {
Some(ref v) => v,
None => {
let v = (self.calculation)(arg);
self.value = Some(v);
// problem is returning reference to value that was in
// v which is now moved, and unwrap doesn't seem to work...
},
}
}
}
结构缓存器
其中T:Fn(U)->U
{
计算:T,
价值:期权,
}
嵌入式缓存器
其中T:Fn(U)->U
{
fn新(计算:T)->缓存{
缓存器{
计算,
值:选项::无,
}
}
fn值(&mut self,参数:U)->&U{
匹配自我价值{
一些(参考v)=>v,
无=>{
设v=(自计算)(arg);
自我价值=一些(v);
//问题是返回对中的值的引用
//v现在被移动,而“展开”似乎不起作用。。。
},
}
}
}
我所有的问题都在fn值获取程序中。我不确定我是否接近了目标,或者我只是走了一条完全错误的道路。那么,我会偏离轨道吗
“展开”似乎不起作用
问题是unwrap
按值获取它的参数,因此它会被移动
类似于
self.value.as_ref().unwrap()
的东西应该可以做到这一点。啊,就是这样!在教程的某个地方,我错过了一个动作。谢谢!