我想实现一个自定义特征&'a str和整数i32,但Rust不允许我:
use std::convert::Into;
pub trait UiId {
fn push(&self);
}
impl<'a> UiId for &'a str {
fn push(&self) {}
}
impl<T: Into<i32>> UiId for T {
fn push(&self) {}
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
无法编译时出现以下错误:
error[E0119]: conflicting implementations of trait `UiId` for type `&str`:
--> src/main.rs:11:1
|
7 | impl<'a> UiId for &'a str {
| ------------------------- first implementation here
...
11 | impl<T: Into<i32>> UiId for T {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `&str`
| …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个错误枚举,它可能包含与我们的某个特征相关的错误,如下所示:
trait Storage {
type Error;
}
enum MyError<S: Storage> {
StorageProblem(S::Error),
}
Run Code Online (Sandbox Code Playgroud)
我还试图实现From特性以允许MyError从一个实例构建Storage::Error:
impl<S: Storage> From<S::Error> for MyError<S> {
fn from(error: S::Error) -> MyError<S> {
MyError::StorageProblem(error)
}
}
Run Code Online (Sandbox Code Playgroud)
(游乐场)
但是这无法编译:
error[E0119]: conflicting implementations of trait `std::convert::From<MyError<_>>` for type `MyError<_>`:
--> src/lib.rs:9:1
|
9 | impl<S: Storage> From<S::Error> for MyError<S> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: conflicting implementation in crate `core`:
- impl<T> std::convert::From<T> for T;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么编译器认为这已经实现了.错误消息告诉我已经有一个From<MyError<_>>(有)的实现,但我不是试图在这里实现 - 我正在尝试实现,From<S::Error> …
我试图专门化一个特性,但由于"实施冲突"而无法编译.但我对专业化的理解是,更具体的实现应该覆盖更通用的实现.这是一个非常基本的例子:
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()
}
Run Code Online (Sandbox Code Playgroud)
错误是:
rustc 1.18.0 (03fc9d622 2017-06-06)
error[E0119]: conflicting implementations of trait `swimming::Swimmer` …Run Code Online (Sandbox Code Playgroud)