0

我想在 main 函数中打印Tweet数据类型的实例,但摘要特征不实现调试特征。有没有办法在 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());
}

错误[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 再次运行该命令。

4

1 回答 1

1

您可以要求任何implsSummary也必须impl std::fmt::Debug如下:

pub trait Summary : std::fmt::Debug { // Summary requires Debug
    fn summarize(&self) -> String;
}

如果您不想绑定DebugSummary则可以随时引入包含其他两个特征的另一个特征:

pub trait DebuggableSummary : Summary + std::fmt::Display {}
于 2019-11-30T18:00:36.370 回答