假设我有两个结构:
struct BlankDoc {
width: u32,
height: u32
}
struct UrlDoc<'a> {
url: &str<'a>
}
有没有什么方法可以使用枚举来创建 Doc
类型,该类型可以是 BlankDoc
或 UrlDoc
,而无需重新实现(复制)他们所有的领域?
我是这样想的:
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),
}
}
关于types - 在 Rust 的枚举中使用现有类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34764702/