类型提示中_的正确用语是什么?

时间:2017-07-11 11:51:35

标签: rust terminology type-theory

在Rust中的类型提示中,可以在注释中使用部分类型,如下所示:

let myvec: Vec<_> = vec![1, 2, 3];

部分类型注释中下划线的正确术语是什么?我对Rust术语以及更多学术类型理论术语感兴趣。

4 个答案:

答案 0 :(得分:8)

我能够找到一个piece of official documentation,其中下划线在模式的上下文中被命名,但我怀疑这是一个“严格”的名称:

  

模式由文字,结构化数组或枚举构造函数,结构和元组,变量绑定规范,通配符(..)和占位符(_)的某种组合组成。

The Book在词汇表中提供了以下说明:

  

_:“忽略”模式绑定(请参阅Patterns (Ignoring bindings))。也用于使整数文字可读(参见Reference (Integer literals))。

我无法找到将特定指向部分类型注释的定义,但我认为“占位符”(或“类型占位符”,取决于上下文)不会有歧义。

答案 1 :(得分:3)

经过一番挖掘后,似乎Vec<_>一直被称为部分类型(因此在let x: Vec<_>中我们有部分类型注释,而Fn(String) -> _将是部分类型签名)但是在此上下文中_不同地称为类型通配符或类型占位符,并且类型语法中的_可以被读作“推断此类型”的标记(在提到PR时)下面,编译器内部TyInfer

一些有趣的读物:

PR的有趣细节:

let x: _ = 5;
let x    = 5;

上面两行是等效的,并且都被解析为变量x,其类型为TyInfer

答案 2 :(得分:2)

在编译器中,它似乎被称为 Infer (在syntax::astrustc::hirrustc::ty中)

我认为这个命名有些合理,因为在进行类似Hindley-Milner的类型推断之前,这些_被新的(类型)推理变量取代。

答案 3 :(得分:0)

似乎语法将其称为“推断类型”。根据{{​​3}}:

推断类型

语法:

InferredType : _

被推断的类型要求编译器根据周围可用的信息来推断类型。不能在项目签名中使用。它通常用于通用参数:

let x: Vec<_> = (0..10).collect();
相关问题