gpt4 book ai didi

rust - 将 `Deref` 实现为返回复合结构的字段是惯用的吗?

转载 作者:行者123 更新时间:2023-11-29 08:01:36 25 4
gpt4 key购买 nike

我有:

struct Id;
struct Url;
struct IdAndUrl {
id: Id,
url: Url,
}

我希望能够使用 IdAndUrl在我需要的地方 Id .为了消除噪音,我可以使用 impl Deref<Id> for IdAndUrl .

这是一个好的做法/惯用语吗?

最佳答案

确实有与DerefDerefMut 相关的接近官方的指南。根据 Rust API 指南中的 C-DEREF“只有智能指针实现 DerefDerefMut。” 您建议使用 Deref 会导致多个问题,因此强烈不建议这样做。

Deref 没有类型参数,但是有关联类型。实现它必须按照下面的代码完成,但永远不能为其他属性实现。

// don't try this at home!
impl Deref for IdAndUrl {
type Target = Id;

fn deref(&self) -> &Self::Target { &self.id }
}

此外,Deref 实现通过 deref 强制公开目标类型的方法,用您可能不想在此处拥有的接口(interface)污染结构。

可以查看其他转换特征(即 FromAsRefBorrow)并查看它们是否有意义 (C-CONV-TRAITS) .但根据我的解释,这些都没有意义。正如另一个答案中已经建议的那样,一个简单的 setter/getter 在这里是理想的:

impl IdAndUrl {
fn id(&self) -> &Id { &self.id }
}

关于rust - 将 `Deref` 实现为返回复合结构的字段是惯用的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com