如何在Rust的内部特征上实现外部特征?

时间:2019-11-30 11:34:20

标签: rust thrust rust-cargo wasm-bindgen

我想在主函数中打印 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());
}
  

错误[E0277]:impl Summary未实现std::fmt::Debug->   src / main.rs:26:29 | 26 | /1./   println!(“ {:#?}”,summarizeable(String :: from(“ Alex”)))); |
   impl Summary不能为^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   使用{:?}进行格式化,因为它没有实现std::fmt::Debug | =帮助:std::fmt::Debug未实现特征impl Summary =注意:std::fmt::Debug::fmt必需

     

错误:由于先前的错误而中止

     

有关此错误的更多信息,请尝试rustc --explain E0277。   错误:无法编译p1

     

要了解更多信息,请使用--verbose再次运行命令。

1 个答案:

答案 0 :(得分:1)

您可以要求impl的{​​{1}}也必须Summary impl的任何内容,如下所示:

std::fmt::Debug

如果您不想将pub trait Summary : std::fmt::Debug { // Summary requires Debug fn summarize(&self) -> String; } Debug绑定,则可以始终引入包含其他两个特征的另一个特征:

Summary