gpt4 book ai didi

rust - 如何为关联类型实现From?

转载 作者:行者123 更新时间:2023-12-03 11:42:21 25 4
gpt4 key购买 nike

我具有以下特征,为此我提供了多种实现:

pub trait Readable {
type Error;
fn read_u8(&mut self) -> Result<u8, Self::Error>;
}
我提供了一个错误类型,该错误类型可以从上述特征的关联类型返回错误:
pub enum MyError<R>
where R: Readable,
{
Readable(R::Error),
Unknown(&'static str),
}
我想为上面实现 From:
impl<R> From<R::Error> for MyError<R>
where R: Readable,
{
fn from(e: R::Error) -> Self {
Self::Readable(e)
}
}
playground
这给我一个错误:
error[E0119]: conflicting implementations of trait `std::convert::From<MyError<_>>` for type `MyError<_>`:
--> src/lib.rs:14:1
|
14 | / impl<R> From<R::Error> for MyError<R>
15 | | where R: Readable,
16 | | {
17 | | fn from(e: R::Error) -> Self {
18 | | Self::Readable(e)
19 | | }
20 | | }
| |_^
|
= note: conflicting implementation in crate `core`:
- impl<T> From<T> for T;
这个错误让我感到困惑。我可以看到的一个问题是 Readable的多个实现可能具有相同的 Error关联类型,但是随后我会期望该错误表明模棱两可,而不是我不是在尝试实现 impl<R> From<R> for R
为什么会认为这是我要尝试的方法,以及如何说服编译器为 From关联类型实现 Error

This question提出了类似的问题,但似乎不适用于我的情况。

最佳答案

Why would it think that's what I'm trying to do, and how to convince the compiler to implement From for the Error associated type?


你不能问题在于,任何东西都可以实现 Readable,因此您可以拥有 Readable::Error = MyError,它会与编译器告诉您的毯式实现重叠(可以将任何 T转换为自身)。
目前,Rust根本不允许重叠特征实现。我什至不确定特化是否可以做到这一点,而且无论如何它都无法完成。

关于rust - 如何为关联类型实现From?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66219419/

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