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)