Tôi muốn thực hiện một đặc điểm tùy chỉnh cho &'a str
và cho số nguyên lên đến i32
, nhưng Rust không cho phép tôi để:triển khai mâu thuẫn của đặc điểm ở 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() {}
này thất bại trong việc biên dịch với các lỗi sau:
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
không thực hiện Into<i32>
. Có thể triển khai UiId
cho &'a str
và mọi thứ có thể được chuyển đổi thành i32
mà không chỉ định loại cụ thể không? Làm thế nào tôi có thể làm điều đó?
Tôi nghĩ rằng nó phải là một hạn chế trong cách Rust xác định xem triển khai phủ (hoặc có thể chồng chéo), nhưng tôi đã không tìm thấy bất cứ nơi nào các quy tắc được viết ra. :-(Oh, cho một đặc tả ngôn ngữ thích hợp –