在枚举变体之间移动数组值

时间:2015-07-02 09:48:18

标签: rust

我的问题如下。我有几个使用越来越多的项目的变种。为简单起见,我将数字减少到前两个:

#[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

2 个答案:

答案 0 :(得分:1)

您可以将约束从Copy更改为Clone;然后,比赛手臂将成为:

&mut Single(ref b) => Double([value, b[0].clone()]),

答案 1 :(得分:1)

每晚你都可以使用&#34; slice_pattern&#34;语法:

Single([one]) => Double([value, one]),

PlayPen