Rust`array.each`参数中使用了什么类型的指针?

Tod*_*orf 3 rust

鉴于此Rust示例(在此处找到):

struct Dog {
    name: ~str
}

fn dogshow() {
    let dogs: [~Dog * 3] = [
        ~Dog { name: ~"Spot"   },
        ~Dog { name: ~"Fido"   },
        ~Dog { name: ~"Snoopy" },
    ];

    // let winner: ~Dog = dogs[1]; // this would be a compile time error.
                                   // can't assign another name to a 
                                   // uniquely owned (`~`) pointer.

    for dogs.each |dog| {  // WTF? `dog` is a second pointer to dogs[x]. 
                           // That's not supposed to be allowed by `~` pointers.
                           // why is this not a compile time error?
        println(fmt!("Say hello to %s", dog.name));
    }
}
Run Code Online (Sandbox Code Playgroud)

什么类型的指针是dog参数.each

dog变量的声明似乎打破了唯一拥有指针(~)一次只能有一个名称的规则.

如何dogsdog不破坏unique owned(~)指针规则的情况下循环并将每个狗分配给变量名称?

dog一个锈病参考在此情况下(从而允许另一名表示借用的指针)?如果是这样,我们怎么知道?Rust References应该使用&语法,不是吗?

小智 8

如您所料,这是一个参考.在闭包中,dogis 的类型&~Dog,表示对a的唯一智能指针的引用Dog.

唯一智能指针的规则并不是只有一种方法来访问数据; 相反,它是每个唯一的智能指针是它指向的数据的唯一直接引用.你仍然可以有多个引用,以独特的智能指针.

为什么你没有注释的原因dog&是由于类型推断:锈编译器知道的类型each,所以你不必写&在封闭.