-6ren"> -我正在开发一个如下所示的函数: fn do_stuff(&mut self, a: MyStruct) -> Result { let x = try!(serde_json::to_vec(-6ren">
gpt4 book ai didi

concurrency - "error: underscore lifetimes are unstable"实现 From

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

我正在开发一个如下所示的函数:

fn do_stuff(&mut self, a: MyStruct) -> Result<(), MyError> {
let x = try!(serde_json::to_vec(a));

let cache = Arc::clone(self.data); // Get shared reference
{
let cache = try!(cache.lock()); // Get lock
cache.push(x);
}

/* Do stuff with other resources */

Ok(())
}

这里定义了MyError是:

#[derive(Debug)]
pub enum MyError {
Serialization(serde_json::Error),
Synch(PoisonError<MutexGuard<'_, Vec<u8>>>),
}

在我开始实现 From<std::sync::PoisonError> 之前对于 MyError , 编译器已经告诉我 Synch 的定义我的枚举的变体是错误的:

error: underscore lifetimes are unstable (see issue #44524)

使用下划线生命周期的声明实际上来自编译器的早期提示,当时我试图找出我应该从 lock 时转换的错误。操作失败。我阅读了上述问题,但这对我没有帮助。

为了捕获来自 Mutex::lock 的错误,我应该转换的完整类型是什么?操作?

最佳答案

像这样:

#[derive(Debug)]
pub enum MyError<'a> {
Serialization(serde_json::Error),
Synch(PoisonError<MutexGuard<'a, Vec<u8>>>),
}

我能在书中找到的最接近的解释是关于 Lifetime Annotations in Struct Definitions 的部分(enum 的行为方式相同)。

编译器建议将不稳定的语法作为解决方案相当不公平。

关于concurrency - "error: underscore lifetimes are unstable"实现 From<std::sync::PoisonError>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49895886/

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