我想打印 的实例推特 主函数中的数据类型,但摘要特征不实现调试特征。有没有办法在 trait 上实现 trait 或任何解决方法。
取消注释第二行并注释第一行将起作用,因为 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
doesn't implementstd::fmt::Debug
--> src/main.rs:26:29 | 26 | /1./ println!("{:#?}",summarizeable(String::from("Alex"))); |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^impl Summary
cannot be formatted using{:?}
because it doesn't implementstd::fmt::Debug
| = help: the traitstd::fmt::Debug
is not implemented forimpl Summary
= note: required bystd::fmt::Debug::fmt
error: aborting due to previous error
For more information about this error, try
rustc --explain E0277
. error: Could not compilep1
.To learn more, run the command again with --verbose.
最佳答案
您可以要求任何 impl
小号 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 {}
关于rust - 如何在 Rust 的内部特征上实现外部特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115760/