我有这个枚举:
enum ImageType {
Png,
Jpeg,
Tiff,
}
有没有办法匹配前两个中的一个,还将匹配的值绑定到变量?例如:
match get_image_type() {
Some(h: ImageType::Png) | Some(h: ImageType::Jpeg) => {
// Lots of shared code
// that does something with `h`
},
Some(ImageType::Tiff) => { ... },
None => { ... },
}
这种语法不起作用,但有没有呢?
答案 0 :(得分:9)
看起来你问的是如何在第一种情况下绑定值。如果是这样,你可以使用它:
match get_image_type() {
// use @ to bind a name to the value
Some(h @ ImageType::Png) | Some(h @ ImageType::Jpeg) => {
// Lots of shared code that does something with `h`
},
Some(ImageType::Tiff) => { ... },
None => { ... }
}
如果您还希望获得match
语句之外的绑定值,可以使用以下内容:
let matched = match get_image_type() {
Some(h @ ImageType::Png) | Some(h @ ImageType::Jpeg) => {
// Lots of shared code that does something with `h`
Some(h)
},
Some(h @ ImageType::Tiff) => {
// ...
Some(h)
},
None => {
// ...
None
},
};
在这种情况下,最好先简单let h = get_image_type()
,然后match h
(感谢BHustus)。
请注意使用h @ <value>
语法将变量名h
绑定到匹配的值(source)。