0
私は特性を特化しようとしましたが、 "実装の矛盾"のためにコンパイルに失敗しました。しかし、専門化の私の理解は、より具体的な実装は、より一般的なものをオーバーライドする必要があります。ここでは非常に基本的な例である:形質特化はどのように実際に機能しますか?
mod diving {
pub struct Diver<T> {
inner: T
}
}
mod swimming {
use diving;
pub trait Swimmer {
fn swim(&self) {
println!("swimming")
}
}
impl<T> Swimmer for diving::Diver<T> {
}
}
mod drowning {
use diving;
use swimming;
impl swimming::Swimmer for diving::Diver<&'static str> {
fn swim(&self) {
println!("drowning, help!")
}
}
}
fn main() {
let x = diving::Diver::<&'static str> {
inner: "Bob"
};
x.swim()
}
エラーは次のとおりです。
rustc 1.18.0 (03fc9d622 2017-06-06)
error[E0119]: conflicting implementations of trait `swimming::Swimmer` for type `diving::Diver<&'static str>`:
--> <anon>:23:5
|
15 |/ impl<T> Swimmer for diving::Diver<T> {
16 | |
17 | | }
| |_____- first implementation here
...
23 |/ impl swimming::Swimmer for diving::Diver<&'static str> {
24 | | fn swim(&self) {
25 | | println!("drowning, help!")
26 | | }
27 | | }
| |_____^ conflicting implementation for `diving::Diver<&'static str>`
私は&'static str
の実際の型と、より具体的な溺死実装は、特殊な実装を可能にすることを期待しているだろうが、代わりにそれが失敗しましたコンパイルします。