gpt4 book ai didi

rust - 将通用结构克隆到特定的生命周期?

转载 作者:行者123 更新时间:2023-11-29 08:06:18 24 4
gpt4 key购买 nike

我正在玩弄 cookie::Cookie并希望为我自己的目的实现一个更简单的 cookie jar。

pub struct NaiveCookieJar<'a> {
data: HashMap<(String, String), Cookie<'a>>,
}

impl<'a> NaiveCookieJar<'a> {
pub fn add<'b>(&mut self, domain: &str, name: &str, cookie: &'b Cookie<'b>) -> bool {
let cookie: &'a Cookie = &cookie.clone(); // not working
self.data
.insert((String::from(domain), String::from(name)), *cookie)
.is_some()
}
}

这导致了 error: E0495: cannot infer an appropriate lifetime for lifetime parameter 'c due to conflicting requirements

我想要的是对于每个参数,它们只需要与方法本身一样长,我可以用 'a 进行复制。插入 HashMap 的生命周期。所以如果我有类似的东西

fn global_jar() -> &'static Mutex<NaiveCookieJar<'static>> {
lazy_static! {
static ref JAR: Mutex<NaiveCookieJar<'static>> = Mutex::new(NaiveCookieJar::new());
}
&JAR
}

...或者在任何情况下 cookie jar 的生命周期比参数长,它不会诱使我实例化具有相应生命周期的结构。

有一个 Cookie::into_owned() -> Cookie<'static>这适合这种特殊情况,但如果 jar 本身不是静态的,显然我不希望 cookie 的生命周期比 jar 长。

仅供引用 Cookie派生 Clone但不是 ToOwned

最佳答案

没有。


这里有一个根本性的误解。

Cookie被声明为带有生命周期参数时,意味着它封装了对具有此生命周期的对象的引用。

为了克隆 Cookie 以获得更长的生命周期,您需要做的是将其分离,克隆引用的对象以获得更长的生命周期,然后重建一个全新的 cookie 引用这个新的生命周期更长的对象。

但是,这不是 clone 默认情况下所做的1克隆 只是传递相同 引用。

因此,在克隆 Cookie 时,您可以获得的唯一生命周期变化是减少生命周期,而不是延长它。

1 如果您考虑一下,谁将拥有新对象?当然不是 Cookie,它只是有一个引用!

关于rust - 将通用结构克隆到特定的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41995598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com