返回具有通用FN性状/值的通用类型的引用



我刚刚开始学习锈蚀并通过锈书工作。其中一个章节通过一些示例进行了主导,并以"尝试制作这种通用"类型的建议练习结束。我一直在为此震惊。您开始的半传导类型是:

struct Cacher<T>
    where T: Fn(i32) -> i32
{
    value: Option<i32>,
    // leaving out rest for brevity

然后,我开始进行转换,以使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...
            },
        }
    }
}

我所有的问题都在FN值Getter中。我不确定我是 close 还是我只是走了完全错误的路径。那么我要去哪里轨道?

和untrap似乎不起作用...

问题在于unwrap按值乘以其参数,因此它被移动了。

诸如self.value.as_ref().unwrap()之类的事情应该做技巧。

相关内容

  • 没有找到相关文章

最新更新