【发布时间】:2014-12-04 03:39:56
【问题描述】:
在一个 Rust 程序中,我有一个用例,我想打印一个数字或管道分隔的数字向量,因此这个简单的包装枚举:
pub enum OneOrMore<T> {
One(T),
More(Vec<T>)
}
效果很好。但是后来我想把格式逻辑移到OneOrMore类型中,所以我尝试了:
impl<T: Show> Show for OneOrMore<T> {
fn fmt(&self, f: &mut Formatter) -> Result {
match self {
One(x) => x.fmt(f),
More(xs) => /* vec_join(xs, "|") or whatever */,
}
}
}
由于impl 是参数化的,因此它需要One<T>,但我的代码描述的是One<_>。问题是我无法弄清楚将类型参数放在匹配臂内的位置。 syntax guide 没有给出参数化类型匹配的示例,fmt 本身不接受类型参数,而且我所有的盲目猜测(One(x: T)、One<T>(x) 等)都不是有效的 Rust。有什么想法我应该指出火柴臂的类型吗?
【问题讨论】:
标签: types pattern-matching rust