我正在阅读问题The Trait `std::fmt::Write` is not Implemented for `Stdout` ,而它应该是提问者指出的地方,rust 文档显示 std::io::Write 特征是为两者实现的&Stdout和标准输出。
我不明白为什么这是必要的或者你将如何使用它。您定义的所有内容不是Thing总是为 实现吗&Thing?为什么你要实现某些东西&Thing而不实现它的定义?
您定义的所有内容不是
Thing总是为 实现吗&Thing?
不,类型的实现T不会自动实现&T. 现在,有时可以启动一揽子实现,如果您将 a 传递&&T给需要 a 的函数&T,那么 Rust 将为您插入取消引用,但这并不意味着该特征是为 实现的&T,只是 Rust 帮助了您一点。
为什么你要实现某些东西
&Thing而不实现它的定义?
有一个我们一直使用的很好的例子:String::from。
impl From<&str> for String {
fn from(value: &str) -> String {
...
}
}
Run Code Online (Sandbox Code Playgroud)
From::<T>::from按值接受一个参数。没有引用或任何东西,只是直接的 type 值T。因此,我们永远不能From<str>为任何东西编写实现,因为str它的大小是不确定的,因此不能单独作为函数参数。但将 a 转换&str为 a是完全有意义的String:这只是制作字符串的自有副本。
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |