Rust`array中使用的是哪种类型的指针。每个`parameter?

Rust`array中使用的是哪种类型的指针。每个`parameter?,rust,Rust,给出这个例子(): 的狗参数是什么类型的指针。每个 dog变量的声明似乎打破了唯一拥有的指针(~)一次只能有一个名称的规则 如何在不违反唯一拥有(~)指针规则的情况下,循环通过狗,并将每个狗分配给变量名狗 在这种情况下,doga是一个生锈的引用吗(因此允许另一个名称表示借用的指针)?如果是,我们怎么知道?Rust引用应使用&语法,否?快速检查的方法是让编译器发出有关狗的类型的错误: for dogs.each |dog| { let test: int = dog; printl

给出这个例子():

参数是什么类型的指针。每个

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

如何在不违反唯一拥有(
~
)指针规则的情况下,循环通过
,并将每个狗分配给变量名


在这种情况下,
dog
a是一个生锈的引用吗(因此允许另一个名称表示借用的指针)?如果是,我们怎么知道?Rust引用应使用
&
语法,否?

快速检查的方法是让编译器发出有关
狗的类型的错误:

for dogs.each |dog| {
    let test: int = dog;
    println(fmt!("Say hello to %s", dog.name));
}
x.rc:20:24: 20:27 error: mismatched types: expected `int` but found `&~Dog` (expected int but found &-ptr)
x.rc:20         let test: int = dog;
                                ^~~
error: aborting due to previous error
这表明
狗的类型
是一个借用的狗的盒子的指针(
&~dog
):

您也可以通过以下方式进行检查:


fn每个正如您所怀疑的,它是一个参考。在闭包中,
dog
的类型是
&~dog
,这意味着引用一个指向
dog
的唯一智能指针

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


您不必使用
&
注释
dog
的原因在于类型推断:Rust编译器知道每个
的类型,因此您不必在闭包中编写
&

完美。这是我真正希望得到的答案。不仅是对问题的精确回答,而且对语言的设计哲学也有一些见解。谢谢你,帕特里克!
x.rc:20:24: 20:27 error: mismatched types: expected `int` but found `&~Dog` (expected int but found &-ptr)
x.rc:20         let test: int = dog;
                                ^~~
error: aborting due to previous error
fn each<'r, T>(v: &'r [T], f: &fn(&'r T) -> bool)