我正在尝试实现
Display
和 Debug
特征,但 rust 会响应 conflicting implementations
。
这是我的代码:
pub trait AsString {
fn as_string(self) -> String;
}
impl<T: Display> AsString for T {
fn as_string(self) -> String {
self.to_string()
}
}
impl<T: Debug> AsString for T {
fn as_string(self) -> String {
format!("{:?}", self)
}
}
但是生锈给了我:
error[E0119]: conflicting implementations of trait `AsString`
--> src/convert_test_result.rs:43:1
|
37 | impl<T: Display> AsString for T {
| ------------------------------- first implementation here
...
43 | impl<T: Debug> AsString for T {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
如何解决这个问题?
不幸的是,负面特征边界还不是稳定 Rust 的一部分。
如果是的话,你可以这样做:
pub trait AsString {
fn as_string(self) -> String;
}
impl<T> AsString for T
where
T: Debug + !Display
{
fn as_string(self) -> String {
format!("{:?}", self)
}
}
impl<T> AsString for T
where
T: Display + !Debug
{
fn as_string(self) -> String {
self.to_string()
}
}
impl<T> AsString for T
where
T: Debug + Display
{
fn as_string(self) -> String {
// you would have to choose which implementation
// to use if a type is both Display and Debug
}
}
但是,您提供的示例永远不会按照您编写的方式运行。