在for循环中使用拥有指针访问枚举的内容

时间:2013-08-05 02:18:01

标签: rust

代码:

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编译的。

1 个答案:

答案 0 :(得分:1)

默认情况下会移动匹配案例中的变量。您不能移动x,因为循环中的所有内容都是不可变的。要获得x str的引用,您需要使用ref关键字:

&Baz(ref x) => *x == ~"asdf"