所以我要问的是,返回类型和std :: vec :: Vec和std :: vec :: Vec之间有什么区别?只是好奇。如果我引用某些东西,我就不会创建一个新类型。它仍保留其数据和结构,因此保留其类型。但由于某种原因,我得到了这个错误:
error[E0308]: mismatched types
--> src/cam.rs:170:3
|
168 | pub fn index2d(self, x: usize, y: usize) -> Vec<u8> {
| ------- expected `std::vec::Vec<u8>` because of return type
169 | let c = &self.pyxels[y*WIDTH+x];
170 | c
| ^
| |
| expected struct `std::vec::Vec`, found reference
| help: try using a conversion method: `c.to_vec()`
|
= note: expected type `std::vec::Vec<u8>`
found type `&std::vec::Vec<u8>`
^ (umm excuse me?)
一个小符号(&)似乎真的有所不同,我不知道为什么。
如果我引用某些东西,我就不会创建一个新类型。
如果通过“创建一个新类型”,你的意思是“创建一个不同类型的对象”,那么是的,这正是你正在做的事情。对事物的引用不是那件事。它类似于拥有一所房子,一张纸和一张写在房子上的房子的地址之间的区别。
虽然Rust的语法经常使通过引用访问对象看起来与直接访问该对象相同。
let v: Vec<u8> = Vec::new();
let vr = &v;
assert_eq!(v.len(), rv.len());
那也许这就是为什么你感到困惑?