compiler-errors - 为什么类型推断不适用于引用类型?

标签 compiler-errors rust type-inference

我写了类似下面的代码:

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的类型推断能做到这一点。
类型推断的顺序会受到操作顺序的影响吗?
如果是这样,为什么在这种情况下无法进行类型推断呢?

最佳答案

这是一个known bug,涉及二进制操作(两个操作数),其原始类型位于引用之后。它正在getting fixed的过程中。

关于compiler-errors - 为什么类型推断不适用于引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59802504/

相关文章:

rust - 在 Bazel 中编译 Rocket

performance - 我应该通过引用还是值传递一个大数组?

函数类型的 Scala 类型推断

c# - 为什么 C# 构造函数不能推断类型?

go - 有没有办法标记编译器忽略未使用的导入?

scala - 在 Play Route 的文件中,如何指示使用来自模块的路由?

module - 如何从私有(private)模块中的公共(public)函数引用私有(private)类型?

objective-c - ARC 不允许将 'int' 隐式转换为 'id _Nonnull'

java - 遇到 "Exception in thread "main“java.util.NoSuchElementException”分配错误

c# - C# 类型推断有多好?