在文档中很难找到这一点.这甚至可能是一个由两部分组成的问题:

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

  2. 将一个类型名用大括号括起来意味着什么

例子:

错误:在当前数据库中找不到类型{integer}的名为pow的方法

推荐答案

{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}.

Rust相关问答推荐

通用池类型xsx

如何在tauri—leptos应用程序中监听后端值的变化?""

是否可以为`T:Copy`执行`T. clone`的测试

是否有可能同时避免不兼容的不透明类型和代码重复?

有没有办法模仿对象安全克隆?

通过解引用将值移出Box(以及它被脱糖到什么地方)?

如何提高自定义迭代器的`extend`性能

这是不是在不造成嵌套的情况下从枚举中取出想要的变体的惯用方法?

为什么基于高山Linux的Docker镜像不能在绝对路径下找到要执行的命令?

在Rust中判断编译时是否无法访问

为什么特征默认没有调整大小?

Rust 编译器不统一在 if let 表达式的分支中都 impl Future 的类型

std::vector::shrink_to_fit 如何在 Rust 中工作?

不能将 `*self` borrow 为不可变的,因为它也被borrow 为可变的 - 编译器真的需要如此严格吗?

使用 traits 时,borrow 的值不会存在足够长的时间

为什么可以在迭代器引用上调用 into_iter?

如何创建递归borrow 其父/创建者的 struct ?

在 Rust 中获得准确时间的正确方法?

编写 TOML 文件以反序列化为 struct 中的枚举

当值是新类型包装器时,对键的奇怪 HashMap 生命周期要求