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 Struct
nur 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
Display
als auch mit der Kiste von verbundenVec
- weder implementieren
Display
fürVec
und führt uns daher zu dem Schluss, dass niemand Display
für implementiert Vec
.
Um dies zu umgehen, können Sie, wie von Manishearth angegeben, das Debug
Merkmal verwenden, das über "{:?}"
als Formatbezeichner aufgerufen werden kann.