Почему вывод типов плохо работает с ссылочными типами? - PullRequest
0 голосов
/ 18 января 2020

Я написал код, подобный приведенному ниже:

fn foo() {
    let x = &1;
    let y = 2;
    let z: u32 = x * y + 42_u32;
}

и получил ошибку:

error[E0277]: cannot add `u32` to `i32`
  --> src/main.rs:11:24
   |
11 |     let z: u32 = x * y + 42_u32;
   |                        ^ no implementation for `i32 + u32`
   |
   = help: the trait `std::ops::Add<u32>` is not implemented for `i32`

Но когда я разыскиваю x, он просто отлично работает.
Во время некоторых экспериментов также были скомпилированы следующие коды:

let z: u32 = x + y * 42_u32;
let z: u32 = 42_u32 + x + y;

Интересно, почему вывод типа Rust делает это.
На порядок вывода типов влияет порядок операций?
Если да, то почему в этой ситуации вывод типа невозможен?

1 Ответ

3 голосов
/ 18 января 2020

Это известная ошибка , включающая двоичные операции (два операнда) с примитивными типами за ссылками. Это исправляется .

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