Я написал код, подобный приведенному ниже:
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 делает это.
На порядок вывода типов влияет порядок операций?
Если да, то почему в этой ситуации вывод типа невозможен?