Rust 将'Deref'实现为返回复合结构的字段是否惯用?
我有: 我希望能够在我只需要Rust 将'Deref'实现为返回复合结构的字段是否惯用?,rust,Rust,我有: 我希望能够在我只需要Id的地方使用IdAndUrl。为了消除噪音,我可以使用impl-Deref for IdAndUrl 这是一个好的实践/习惯用法吗?Deref的目的是实现指针类型。它应该将指向T的指针转换为T,因此取消对指针的引用感觉“自然”。使用它在不相关的类型之间转换似乎令人困惑 我建议您添加一个getter方法id()。确实有一些与Deref和DerefMut相关的官方指南。根据Rust API指南,“只有智能指针实现Deref和DerefMut”。您建议使用Deref将导致
Id
的地方使用IdAndUrl
。为了消除噪音,我可以使用impl-Deref for IdAndUrl
这是一个好的实践/习惯用法吗?Deref的目的是实现指针类型。它应该将指向
T
的指针转换为T
,因此取消对指针的引用感觉“自然”。使用它在不相关的类型之间转换似乎令人困惑
我建议您添加一个getter方法
id()
。确实有一些与Deref
和DerefMut
相关的官方指南。根据Rust API指南,“只有智能指针实现Deref
和DerefMut
”。您建议使用Deref
将导致多个问题,因此这是非常不明智的
没有类型参数,但有关联的类型。实现它必须按照下面的代码进行,但不能为其他属性实现
struct Id;
struct Url;
struct IdAndUrl {
id: Id,
url: Url,
}
此外,Deref
实现通过Deref强制公开来自目标类型的方法,用您可能不希望在这里使用的接口污染结构
我们可以查看其他转换特征(即From
,AsRef
,和借用
),看看它们是否有意义()。但根据我的解释,这些都没有意义。正如在另一个答案中已经提到的,简单的getter在这里是理想的:
// don't try this at home!
impl Deref for IdAndUrl {
type Target = Id;
fn deref(&self) -> &Self::Target { &self.id }
}
相关的:
impl IdAndUrl {
fn id(&self) -> &Id { &self.id }
}