代码:
enum A {
Foo,
Bar,
Baz(~str)
}
#[test]
fn test_vector(){
let test_vec = ~[Foo, Bar, Baz(~"asdf")];
for x in test_vec.iter() {
match x {
&Foo => true,
&Bar => true,
&Baz(x) => x == ~"asdf"
};
}
}
我收到以下错误:
stackoverflow.rs:15:13: 15:19 error: cannot move out of dereference of & pointer
stackoverflow.rs:15 &Baz(x) => x == ~"asdf"
^~~~~~
error: aborting due to previous error
如果我将字符串更改为int,则编译正常。
我的问题是:如何在for循环中访问枚举中拥有指针的内容?是否有我应该使用的备用迭代器?
我正在使用的Rust版本是从master编译的。
答案 0 :(得分:1)
默认情况下会移动匹配案例中的变量。您不能移动x
,因为循环中的所有内容都是不可变的。要获得x
str的引用,您需要使用ref
关键字:
&Baz(ref x) => *x == ~"asdf"