Rust: Как ссылка может быть типом? - PullRequest
0 голосов
/ 05 марта 2019

Итак, я спрашиваю, в чем разница между типами возвращаемых данных, & 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?)

Этот маленький символ (&) действительно имеет значение, и я понятия не имею, почему.

1 Ответ

0 голосов
/ 05 марта 2019

Если я ссылаюсь на что-то, я не создаю новый тип.

Если под «создание нового типа» , вы имеете в виду "создание объекта другого типа" , тогда да, это именно то, что вы делаете.Ссылка на вещь не та вещь.Это похоже на разницу между домом и листом бумаги с адресом дома, написанным на нем.

Хотя синтаксис Rust часто делает доступ к объекту через ссылку, похожую на прямуюдоступ к этому объекту.

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

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

Так, возможно, именно поэтому вы запутались?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...