Я хочу, чтобы реализовать пользовательский признак для &'a str
и для целых чисел до i32
, но ржавчина не позволяет мне:Противоречивые реализации признака Руст
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() {}
Это не может скомпилировать со следующей ошибкой:
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
не реализует Into<i32>
. Возможно ли реализовать UiId
для &'a str
и все, что может быть преобразовано в i32
без указания конкретных типов? Как я могу это сделать?
Я думаю, что это должно быть ограничение в отношении того, как Rust определяет, накладываются ли наложения (или могут перекрываться), но я не нашел нигде, где правила выписаны. :-(О, для правильной спецификации языка! –