我的问题如下。我有几个使用越来越多的项目的变种。为简单起见,我将数字减少到前两个:
#[derive(Debug)]
pub enum Variant<A> {
Single([A; 1]),
Double([A; 2]),
}
我想创建一些特殊方法,最好将Single
转换为Double
。例如,如果我在push_front(a)
上致电Single([x])
,我需要回复Double([a,x]
。我能做到的一种方法是:
impl<A: Copy> Variant<A> {
fn push_front(&mut self, value: A) {
self* = match self {
&mut Single(b) => Double([value, b[0]]),
_ => panic!("Can't convert"),
};
}
}
如果A
不必实施Copy
,是否有办法达到类似的效果?
游乐场链接:http://is.gd/i0bQtl
答案 0 :(得分:1)
您可以将约束从Copy
更改为Clone
;然后,比赛手臂将成为:
&mut Single(ref b) => Double([value, b[0].clone()]),
答案 1 :(得分:1)