愚蠢的n00b试图了解一点关于锈病的知识。这是我的节目:
fn main() {
let v = vec![1, 2, 3];
println!("{:?}", v);
println!("{:?}", &v);
}产出:
[1, 2, 3]
[1, 2, 3]&的意义是什么?我还以为它会打印一个记忆地址呢。
我最初是在简介中被抛出的,它看起来像是在循环一个引用。我猜是铁锈做了一些魔术,并检测到它是一个向量的记忆地址?
发布于 2015-04-17 17:40:35
这句话有什么意义?
正如您所推测的那样,&接受对象的引用。但是,有一个类型只输出引用对象。之所以这样做,是因为锈蚀倾向于更倾向于价值相等,而不是引用相等:
impl<'a, T: ?Sized + $tr> $tr for &'a T {
fn fmt(&self, f: &mut Formatter) -> Result { $tr::fmt(&**self, f) }
}如果要打印内存地址,可以使用{:p}
let v = vec![1,2,3];
println!("{:p}", &v);看起来他们在循环通过一个引用
for i in foo语法糖在foo上调用into_iterator,并且有一个&Vec返回迭代器中对项的引用的迭代器:
fn into_iter(self) -> slice::Iter<'a, T> {
self.iter()
}发布于 2015-04-17 17:29:44
神奇的是格式化程序中的AFAIK,而不是编译器。例如,见:
fn take_val<T>(a:Vec<T> ) {}
fn take_ref<T>(b:&Vec<T>) {}
fn main() {
let v = vec![1, 2, 3];
take_val(&v);
take_ref(&v);
}失败时有以下错误:
<anon>:6:14: 6:16 error: mismatched types:
expected `collections::vec::Vec<_>`,
found `&collections::vec::Vec<_>`
(expected struct `collections::vec::Vec`,
found &-ptr) [E0308]
<anon>:6 take_val(&v);这表明,这是由于格式化程序不想显示引用和值之间的差异。在旧版本的Rust中,如果我的记忆正确的话,一个&v就会显示为&[1, 2, 3]。
&在锈病中有着特殊的意义。它不仅仅是一个引用,它是一个注释,它的值被借用到一个或多个函数/方法。
https://stackoverflow.com/questions/29705268
复制相似问题