枚举值的向量会产生所有权问题

时间:2014-12-14 10:06:26

标签: rust ownership

我有两个代码片段,直到几天才运行良好。它们看起来很简单:

1

let mut mask = 0 as c_ulong;
for bit in bits.iter() {
    mask |= *bit as c_ulong;
}

2

for bit in vec!(...).iter() {
    if res & *bit as c_ulong != 0 {
        bits.push(*bit);
    }
}

两种情况下的向量迭代向量都包含enum,如:

#[allow(non_camel_case_types)]
#[deriving(PartialEq,Show)]
pub enum SomeEnum {
    BLAH                 = 0x01,
    ...
}

但遗憾的是,现在该代码会导致所有*bit表达式出现以下错误。

cannot move out of dereference of `&`-pointer

我不明白这个错误。为什么现在不允许?我有一个指向不可变向量的指针,其枚举变量几乎只有int值。

另外,我该如何解决?我知道第一个案例可以转换为使用.into_iter() - 那没关系,之后我不需要那个向量。但在第二个片段中,我实际上无法在bit之后两次使用.into_iter()。即使我第一次只比较它!

我在这里错过了一些小事吗?

1 个答案:

答案 0 :(得分:3)

您的类型曾是Copy,但this trait is now opt-in

向您的类型添加#[deriving(Clone, Copy)](或将CloneCopy添加到现有#[deriving]属性中的特征列表)。您需要实现CloneCopy,因为Copy is a subtrait of Clone(因为任何实现Copy的类型也可以轻松实现Clone)。

pub trait Copy: Clone { }