是否有可能重寫它而不包裝?
不,您需要製作包裝。請記住,類型別名不會創建新類型 - 這就是爲什麼他們被稱爲別名。如果你能夠在這裏重新定義Debug
,你會影響每HashMap
(不是一個好主意)。
打印時只需要包裝,因此您可以有println!("{:?}", DebugWrapper(&a_linear_value))
。
你可能是非常看中並提出延期性狀做同樣的事情:
use std::collections::HashMap;
use std::fmt;
pub type Linear = HashMap<i16, f64>;
trait MyDebug<'a> {
type Debug: 'a;
fn my_debug(self) -> Self::Debug;
}
impl<'a> MyDebug<'a> for &'a Linear {
type Debug = LinearDebug<'a>;
fn my_debug(self) -> Self::Debug { LinearDebug(self) }
}
struct LinearDebug<'a>(&'a Linear);
impl<'a> fmt::Debug for LinearDebug<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "custom")
}
}
fn main() {
let l = Linear::new();
println!("{:?}", l);
println!("{:?}", l.my_debug());
}