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

时间:2016-01-13 10:50:43

标签: types enums rust algebraic-data-types

说我有两个结构:

struct BlankDoc {
    width: u32,
    height: u32
}

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

是否有某种方法可以使用枚举来生成Doc类型BlankDocUrlDoc,而无需重新实现(复制)所有字段?< / p>

我在想这样的事情:

enum Doc {
    &BlankDoc
    &UrlDoc
}

type Doc = BlankDoc|UrlDoc;

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

在Rust中对此进行建模的惯用方法是什么?

1 个答案:

答案 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),
    }
}

full playground example