说我有两个结构:
struct BlankDoc {
width: u32,
height: u32
}
struct UrlDoc<'a> {
url: &str<'a>
}
是否有某种方法可以使用枚举来生成Doc
类型BlankDoc
或UrlDoc
,而无需重新实现(复制)所有字段?< / p>
我在想这样的事情:
enum Doc {
&BlankDoc
&UrlDoc
}
或
type Doc = BlankDoc|UrlDoc;
(显然这两种方式都不存在。)
在Rust中对此进行建模的惯用方法是什么?
答案 0 :(得分:7)
您可以将现有结构包装在枚举中。例如
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),
}
}