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

标签 rust thrust rust-cargo wasm-bindgen

我想打印 的实例推特 主函数中的数据类型,但摘要特征不实现调试特征。有没有办法在 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 implement std::fmt::Debug --> src/main.rs:26:29 | 26 | /1./ println!("{:#?}",summarizeable(String::from("Alex"))); |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl Summary cannot be formatted using {:?} because it doesn't implement std::fmt::Debug | = help: the trait std::fmt::Debug is not implemented for impl Summary = note: required by std::fmt::Debug::fmt

error: aborting due to previous error

For more information about this error, try rustc --explain E0277. error: Could not compile p1.

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;
}

如果不想打结DebugSummary您总是可以引入另一个包含其他两个特征的特征:
pub trait DebuggableSummary : Summary + std::fmt::Display {}

关于rust - 如何在 Rust 的内部特征上实现外部特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115760/

相关文章:

multidimensional-array - 使用ndarray实现逐行操作

vector - CUDA推力库: How can I create a host_vector of host_vectors of integers?

c++ - 有没有一种方法可以使用 Thrust 根据索引 vector 设置标志

macos - 运行 `cc` 时无法执行链接器 "cargo build"错误

visual-studio-code - 为什么 `cargo build` 无法在 VS Code 中编译 structopt-derive?

json - 读入json文件,写入不缩进

rust - std::string::String 作为字节字符串(即 b"foo"或弃用的字节!("foo"))

rust - 如何将 Option<Box<ListNode>> 的链表转换为 Vec<i32>?

rust - 在 Rust 中将 Vec<&str> 转换为 Vec<&CStr>

c++ - CUDA 推力返回类型