繁体   English   中英

如何在 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;
}

如果您不想将DebugSummary联系起来,您总是可以引入另一个包含其他两个特征的特征:

pub trait DebuggableSummary : Summary + std::fmt::Display {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM