我有两个代码片段,直到几天才运行良好。它们看起来很简单:
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()
。即使我第一次只比较它!
我在这里错过了一些小事吗?
答案 0 :(得分:3)
您的类型曾是Copy
,但this trait is now opt-in。
向您的类型添加#[deriving(Clone, Copy)]
(或将Clone
和Copy
添加到现有#[deriving]
属性中的特征列表)。您需要实现Clone
和Copy
,因为Copy
is a subtrait of Clone
(因为任何实现Copy
的类型也可以轻松实现Clone
)。
pub trait Copy: Clone { }