gpt4 book ai didi

types - 在 Rust 的枚举中使用现有类型

转载 作者:行者123 更新时间:2023-11-29 07:46:40 24 4
gpt4 key购买 nike

假设我有两个结构:

struct BlankDoc {
width: u32,
height: u32
}

struct UrlDoc<'a> {
url: &str<'a>
}

有没有什么方法可以使用枚举来创建 Doc 类型,该类型可以是 BlankDocUrlDoc,而无需重新实现(复制)他们所有的领域?

我是这样想的:

enum Doc {
&BlankDoc
&UrlDoc
}

type Doc = BlankDoc|UrlDoc;

(显然这两种方式都不存在。)

在 Rust 中建模的惯用方法是什么?

最佳答案

您可以将现有结构包装在枚举中。例如

enum Doc<'a> {
Blank(BlankDoc),
Url(UrlDoc<'a>),
}

然后你可以这样做:

fn test<'a>(doc: Doc<'a>) {
match doc {
Doc::Blank( BlankDoc { width: w, height: h }) =>
println!("BlankDoc with w:{}, h:{}", w, h),
Doc::Url( UrlDoc { url: u }) =>
println!("UrlDoc with url:{}", u),
}
}

full playground example

关于types - 在 Rust 的枚举中使用现有类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34764702/

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