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()
的东西应该可以做到这一点。

啊,就是这样!在教程的某个地方,我错过了一个动作。谢谢!