傻n00b试图学习一点Rust.这是我的计划:
fn main() {
let v = vec![1, 2, 3];
println!("{:?}", v);
println!("{:?}", &v);
}
Run Code Online (Sandbox Code Playgroud)
产生了输出:
[1, 2, 3]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
有什么意义&?我有一半期待它打印一个内存地址.
我最初是由这在抛出介绍它看起来像他们被循环通过一个参考.我的猜测是Rust做了一些魔法并检测到它是向量的内存地址?
&的重点是什么?
&正如你所推测的那样,它会引用一个对象.但是,有一个Debug实现对Debug类型的引用只打印出引用的对象.这样做是因为Rust倾向于更喜欢值相等而不是引用相等:
impl<'a, T: ?Sized + $tr> $tr for &'a T {
fn fmt(&self, f: &mut Formatter) -> Result { $tr::fmt(&**self, f) }
}
Run Code Online (Sandbox Code Playgroud)
如果您想打印内存地址,可以使用{:p}:
let v = vec![1,2,3];
println!("{:p}", &v);
Run Code Online (Sandbox Code Playgroud)
它看起来像是在循环引用
该for i in foo语法糖调用into_iterator上foo,并有一个实施IntoIterator的&Vec返回到了迭代项目的引用的迭代器:
fn into_iter(self) -> slice::Iter<'a, T> {
self.iter()
}
Run Code Online (Sandbox Code Playgroud)