什么是类型推断?

Kai*_*Kai 3 types type-systems programming-languages type-inference

它只存在于静态类型语言中吗?并且只有当语言不是强类型时才存在(即,Java 是否有强类型)?此外,它属于哪里 - 在编译阶段假设它是一种编译语言?

一般来说,类型不明确时的规则是由语言规范规定的还是由实现决定的?

Bri*_*ian 5

类型推断是一些静态类型语言的一个特性。由编译器完成将类型分配给缺少任何类型注释的实体。编译器实际上只是代表程序员“填充”了静态类型信息。

类型推断在具有许多隐式强制和歧义的语言中往往效果更差,因此大多数类型推断语言是函数式语言,几乎没有强制、重载等。

类型推断是语言规范的一部分,例如 F# 规范详细介绍了类型推断算法和规则,因为这有效地确定了“什么是合法程序”。

尽管某些(大多数?)语言支持某些有限形式的类型推断(例如 C# 中的“var”),但在大多数情况下,人们使用“类型推断”来指代绝大多数类型是推断而不是显式的语言(例如在 F# 中,除了局部变量之外,通常还会推断函数和方法签名;与 C# 相比,“var”允许推断局部变量,但方法声明需要完整的类型信息)。