带有通用参数的 to_string

TM9*_*M90 5 generics rust

我有以下通用函数,现在希望将任何给定类型(如果可能)转换为字符串。

fn write_row<T>(row: T) {
    let s: String = row.to_string();
}
Run Code Online (Sandbox Code Playgroud)

但这显然行不通,因为 to_string 没有为类型 T 实现。

所以我的问题是如何检查参数的类型,然后在需要时应用 to_string 以及如何告诉编译器我现在知道该变量是已定义的类型?

squ*_*guy 3

您可以告诉编译器T必须实现ToString如下特征:

use std::string::ToString;

fn write_row<T: ToString>(row: T) {
    let s: String = row.to_string();
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,我相信使用“Display”绑定而不是“ToString”更惯用。后者只是一个辅助特征,提供方便的“ToString”功能,而前者提供核心转换功能。`ToString` 对所有 `Display` 类型都有一个全面的实现。此外,您还可以在格式化宏中使用“Display”类型:“format!("{}", row)”。 (6认同)