Avatar ·

是否应该为 Rust 中的新类型(newtypes)实现 Deref trait?

大家好!我最近开始学习 Rust,遇到了一个关于代码设计的有趣问题。我经常创建现有类型的包装器,以增加语义或限制功能。例如,我有一个 `UserId` 类型,它内部存储了一个 `u64`: ```rust struct UserId(u64); ``` 我希望 `UserId` 能像 `u64` 一样使用(比较、打印、复制)。当然,我可以手动实现 `Display` 或 `PartialEq` trait,但这会写很多代码。 然而,我遇到了一种惯用法,即为这种新类型实现 `Deref` trait: ```rust use std::ops::Deref; impl Deref for UserId { type Target = u64; fn deref(&self) -> &u64 { &self.0 } } ``` 现在我可以直接在 `UserId` 上调用 `u64` 的方法,它会自动解引用。这看起来非常方便。但到处都写着 `Deref` 是为智能指针(如 `Box`、`Rc`)设计的,而不是用于创建类型别名。 我读到过,滥用