Implementiert jemand dieses Merkmal für Vec<T>?
Nein.
Und überraschenderweise ist dies eine nachweislich richtige Antwort. Das ist selten, da es normalerweise schwierig oder unmöglich ist, das Fehlen von Dingen zu beweisen. Wie können wir also so sicher sein?
Rust hat sehr strenge Kohärenzregeln, die impl Trait for Structnur gemacht werden können:
- entweder in der gleichen Kiste wie
Trait
- oder in der gleichen Kiste wie
Struct
und nirgendwo anders; Lass es uns versuchen :
impl<T> std::fmt::Display for Vec<T> {
fn fmt(&self, _: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
Ok(())
}
}
Ausbeuten:
error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
--> src/main.rs:1:1
|
1 | impl<T> std::fmt::Display for Vec<T> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
|
= note: only traits defined in the current crate can be implemented for a type parameter
Um ein Merkmal zu verwenden, muss es außerdem im Geltungsbereich sein (und daher müssen Sie mit seiner Kiste verknüpft sein). Dies bedeutet, dass:
- Sie sind sowohl mit der Kiste
Displayals auch mit der Kiste von verbundenVec
- weder implementieren
DisplayfürVec
und führt uns daher zu dem Schluss, dass niemand Displayfür implementiert Vec.
Um dies zu umgehen, können Sie, wie von Manishearth angegeben, das DebugMerkmal verwenden, das über "{:?}"als Formatbezeichner aufgerufen werden kann.