Reference Rust:引用如何成为类型?

Reference Rust:引用如何成为类型?,reference,rust,Reference,Rust,所以我要问的是,返回类型&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&g

所以我要问的是,返回类型&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?)
错误[E0308]:类型不匹配
-->src/cam.rs:170:3
|
168 | pub fn index2d(self,x:usize,y:usize)->Vec{
|----由于返回类型,应为'std::vec::vec'
169 |设c=&self.pyxels[y*宽度+x];
170摄氏度
|         ^
|         |
|应为结构'std::vec::vec',找到引用
|帮助:尝试使用转换方法:`c.to_vec()`
|
=注意:应为'std::vec::vec'类型`
找到类型“%std::vec::vec”`
^(嗯,对不起?)
这一个小小的符号(&)似乎真的能改变一切,我不知道为什么

如果我引用了某个东西,我并不是在创建一个新类型

如果“创建一个新类型”,你的意思是“创建一个不同类型的对象”,那么是的,这正是你正在做的。对一个事物的引用并不是那件事。这类似于拥有一栋房子和有一张写有房子地址的纸条之间的区别

尽管Rust的语法通常使通过引用访问对象看起来与直接访问该对象完全相同

let v: Vec<u8> = Vec::new();
let vr = &v;

assert_eq!(v.len(), rv.len());
让v:Vec=Vec::new();
设vr=&v;
断言(v.len(),rv.len());

因此,这可能就是您感到困惑的原因?

您通读了吗?举个例子,您似乎应该重新审视Rust的所有权概念。您很可能希望您的函数至少是
fn index2d(&self,x:usize,y:usize)->&Vec
。这里没有真正的问题,我只是糊涂了。我把它改成了
pub fn index2d(self,x:usize,y:usize)->[u8;3]{让c=&self.pyxels[y*WIDTH+x];*c}
我不相信这对您展示的特定代码示例有效。您还忘记了
&self
上的
&
。它可以编译和运行,尽管我相信它可以改进。您没有提供足够的代码来实际尝试编译某些内容,因此无法确定。如果您的返回类型真的是
Vec
但是,我认为
*c
不可能真正起作用。请包含一个完整的on。我想我明白了。因此,当我将某个内容传递给函数时,它确实需要该类型,因为某些内容将对引用进行操作,而其他内容将需要拥有的类型。否则,疯狂的事情将开始发生。如果函数期望如果是引用,则使用
&
运算符生成该值的引用版本。