gpt4 book ai didi

compiler-errors - 将 OsString 传递给 func, 的误导性错误 Display 特征从何而来?

转载 作者:行者123 更新时间:2023-11-29 08:27:45 28 4
gpt4 key购买 nike

为什么调用这个函数:

use std::string::ToString;
use std::ffi::OsString;

fn len<T: ToString>(v: &T) -> usize {
v.to_string().len()
}

fn main() {
let text = OsString::from("Hello, world!");
let tlen = len(&text);
println!("len('{:?}') = {}", &text, tlen);
}

引发此编译错误:

<anon>:10:16: 10:19 error: the trait `core::fmt::Display` is not implemented for the type `std::ffi::os_str::OsString` [E0277]
<anon>:10 let tlen = len(&text);
^~~
<anon>:10:16: 10:19 note: `std::ffi::os_str::OsString` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string
<anon>:10 let tlen = len(&text);
^~~
error: aborting due to previous error
playpen: application terminated with error code 101

我知道代码被破坏了,因为 OsString 没有实现 ToString

最佳答案

trait ToStringimplemented by all types that implement Display (事实上​​,只有那些类型):

impl<T: fmt::Display + ?Sized> ToString for T {
...

因此,当编译器寻找 ToString 的实现时,它最终会尝试为 Display 寻找一个实现,这就是 的特征搜索失败的地方OsString(Display 没有相同类型的“一揽子实现”)。

关于compiler-errors - 将 OsString 传递给 func<T : ToString>, 的误导性错误 Display 特征从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29944364/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com