编译器错误消息中的{integer}或{float}是什么?

时间:2017-02-02 07:51:53

标签: compiler-errors rust

在文档中很难找到它。这甚至可能是一个两部分问题:

  1. {integer}{float}是某种特定基本类型的语言别名吗?

  2. 将类型名称括在大括号中是什么意思 编译/语法错误消息?

  3. 示例:

      

    错误:当前没有为类型pow找到名为{integer}的方法   范围

2 个答案:

答案 0 :(得分:8)

错误消息中的

{integer}是任何整数类型({i,u}{8,16,32,64,128})的占位符。 (Source

Rust中的整数文字是根据其用法推断的类型。例如,在以下代码中,123的类型在第一个实例中为u8,在第二个实例中为u64

let a: u8 = 123;
let a: u64 = 123;
当编译器没有找到具体类型的值时,

{integer}用于表示错误消息中的任何整数类型。

答案 1 :(得分:7)

{integer}是一个整数值,其具体类型未指定,尚未被编译器推断;以下代码:

fn main() {
    let x = 1;
    let () = x;
}

将导致以下错误:

error[E0308]: mismatched types

 --> <anon>:3:9
  |
3 |     let () = x;
  |         ^^ expected integral variable, found ()
  |
  = note: expected type `{integer}`
  = note:    found type `()`

浮点数会发生同样的情况:

fn main() {
    let x = 1.0;
    let () = x;
}
error[E0308]: mismatched types
 --> <anon>:3:9
  |
3 |     let () = x;
  |         ^^ expected floating-point variable, found ()
  |
  = note: expected type `{float}`
  = note:    found type `()`

因为在类型推断发生之前抛出了由无效赋值let () = x引起的编译错误。

换句话说,直到编译到达类型推断阶段,其中将识别没有指定具体类型的整数或浮点数(例如,基于函数应用程序)或分配默认类型,i32表示整数和f64对于浮点数,编译错误会将其称为{integer}{float}