[英]Can I implement a trait which adds information to an external type in Rust?
[英]how can I implement an external trait on an internal trait in Rust?
我想在 main 函数中打印Tweet数据类型的实例,但是摘要特征没有实现调试特征。 有什么方法可以在特征上实现特征或任何解决方法。 取消注释第二行并注释第一行会起作用,因为 String 类型实现了 Display 特征。
#[derive(Debug)]
struct Tweet {
name: String,
}
pub trait Summary {
fn summarize(&self) -> String;
}
impl Summary for Tweet {
fn summarize(&self) -> String {
format!("@{}", &self.name)
}
}
fn summarizeable(x: String) -> impl Summary {
Tweet { name: x }
}
fn main() {
//1.
println!("{:#?}", summarizeable(String::from("Alex")));
//2.println!("{}",summarizeable(String::from("Alex")).summarize());
}
error[E0277]:
impl Summary
没有实现std::fmt::Debug
--> src/main.rs:26:29 | 26 | / 1. / println:("{?#,}":summarizeable(String:;from("Alex"))); |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^impl Summary
cannot be formatted using{:?}
因为它不t 实现std::fmt::Debug
| = 帮助:特征std::fmt::Debug
没有为impl Summary
= 注意:std::fmt::Debug::fmt
需要错误:由于先前的错误而中止
有关此错误的更多信息,请尝试
rustc --explain E0277
。 错误:无法编译p1
。要了解更多信息,请使用 --verbose 再次运行该命令。
您可以要求任何impl
s Summary
也必须impl
std::fmt::Debug
,如下所示:
pub trait Summary : std::fmt::Debug { // Summary requires Debug
fn summarize(&self) -> String;
}
如果您不想将Debug
与Summary
联系起来,您总是可以引入另一个包含其他两个特征的特征:
pub trait DebuggableSummary : Summary + std::fmt::Display {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.