首页 > 解决方案 > 借用和终身为工厂具体实施

问题描述

我对 rust 很陌生,目前正在尝试简单的概念来更多地理解它。我创建了一个具体工厂的示例,该示例采用特征依赖关系,其create方法返回由特征定义的具体实例。

我收到关于终身借款的错误。

我在这里的操场上创建了一个失败的例子。

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f9753708dc202c27101442952dabf560

标签: rust

解决方案


您做的大部分事情都是正确的,您只错过了一个主要限制:当您dyn SomethingToUse从工厂返回时:

pub fn create(&self) -> Result<Box<dyn SomethingToUse>>{
    let something = SomethingConcrete{
        helper: self.helper // I removed the & here. That would be a double reference.
    };
    return Ok(Box::new(something));
}

它包含一个对 有效的引用'a。但是,您没有对此进行注释。这样做的方法是dyn SomethingToUse + 'a

我还用 an 替换了您的盒装特征对象,impl SomethingToUse因为我希望在大多数情况下,这不是必需的。

链接到工作代码:https ://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b02c4ff9d5e2ad03b7dfd2db00941b7c


推荐阅读