Chcę zaimplementować niestandardową cechę dla &'a str
i dla liczb całkowitych aż do i32
, ale rdza nie pozwala mi:Sprzeczne implementacje cechy 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() {}
To nie skompilować z powodu następującego błędu:
error[E0119]: conflicting implementations of trait `UiId` for type `&str`:
--> src/main.rs:11:1
|
7 |/impl<'a> UiId for &'a str {
8 | | fn push(&self) {}
9 | | }
| |_- first implementation here
10 |
11 |/impl<T: Into<i32>> UiId for T {
12 | | fn push(&self) {}
13 | | }
| |_^ conflicting implementation for `&str`
&'a str
nie implementuje Into<i32>
. Czy jest możliwe wdrożenie UiId
dla &'a str
i wszystkiego, co można przekonwertować na i32
bez określania konkretnych typów? Jak mogę to zrobić?
Myślę, że to musi być ograniczenie w sposobie, w jaki Rust określa, czy nakładka implementacji (lub może nakładać się), ale nie znalazłem nigdzie, gdzie zasady są podane. :-(Och, dla właściwej specyfikacji językowej! –