Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 将'Deref'实现为返回复合结构的字段是否惯用?_Rust - Fatal编程技术网

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 }
}