私はこのような当社の特徴の一つに関連したエラーを含むことができ、エラーの列挙型を実装しようとしています:ジェネリック型を使用しているときに `From`の実装がどのように矛盾していますか?
trait Storage {
type Error;
}
enum MyError<S: Storage> {
StorageProblem(S::Error),
}
私ものインスタンスからMyError
の構築を可能にしFrom
形質を実装しようとしていますStorage::Error
:
impl<S: Storage> From<S::Error> for MyError<S> {
fn from(error: S::Error) -> MyError<S> {
MyError::StorageProblem(error)
}
}
しかし、これはコンパイルに失敗します。
error[E0119]: conflicting implementations of trait `std::convert::From<MyError<_>>` for type `MyError<_>`:
--> src/main.rs:9:1
|
9 |/impl<S: Storage> From<S::Error> for MyError<S> {
10 | | fn from(error: S::Error) -> MyError<S> {
11 | | MyError::StorageProblem(error)
12 | | }
13 | | }
| |_^
|
= note: conflicting implementation in crate `core`
コンパイラがこれを既に実装している理由がわかりません。エラーメッセージは、すでに実装されているFrom<MyError<_>>
(これがあります)ですが、実装しようとしていません - 実装しようとしていますFrom<S::Error>
とMyError
は同じタイプではありませんS::Error
見る。
ここにジェネリックスの基本的なものがありませんか?
夜間に拡張機能が実装されましたか? – WiSaGaN
いいえ、実際には制限されたフォームは引き続き夜間にのみ利用できます。私は、より柔軟でパワフルなバージョンにダイビングする前に、バグをビット/アイロンでベーキングすることを意図していると信じています。 – huon
明確な答え:ありがとう。私は、エラーメッセージが、既にそこにあることを暗示するのではなく、実装が矛盾しているかもしれないと言った場合、少しはっきりするかもしれないと思います。 – Fraser