Rust:引用如何成为一种类型?

问题描述 投票:-4回答:1

所以我要问的是,返回类型和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?)

一个小符号(&)似乎真的有所不同,我不知道为什么。

reference rust
1个回答
4
投票

如果我引用某些东西,我就不会创建一个新类型。

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

虽然Rust的语法经常使通过引用访问对象看起来与直接访问该对象相同。

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

assert_eq!(v.len(), rv.len());

那也许这就是为什么你感到困惑?

© www.soinside.com 2019 - 2024. All rights reserved.