Go语言的类型推断算法

9

Go编译器使用哪种类型推断算法?

我在golang上尝试查找文档,但未能找到。我倾向于认为它会是Hindley-Milner算法,但我想确定一下。


5
你使用哪种算法推断算法会是 Hindley-Milner 算法? - Denys Séguret
1个回答

23

Go语言确实没有使用Hindley-Milner类型系统。你为什么会这样认为呢?事实上,Go语言一般来说没有类型推断,只有在使用:=结构时才会进行类型推断,它采用极其简单的规则,即将右侧表达式的计算结果类型应用于左侧新声明的变量中。这实际上与C++11的auto关键字非常相似(除了不涉及处理const和引用的规则)。


3
值得注意的是:使用 := 推断出来的类型在编译时就已经确定了,而非运行时。 - thwd
2
@Tom:在运行时“推断”类型是否可能? - Lily Ballard
是的,在像 PHP 这样的鸭子类型语言中。 - thwd
6
@Tom:那不是类型推断,那只是运行时类型信息。 - Lily Ballard
1
这不是类型推断,而是动态类型。像PHP这样的动态语言没有也不需要类型推断。类型推断是静态类型语言的语法糖。类型推断和动态类型都与鸭子类型无关。http://en.wikipedia.org/wiki/Type_inference - Amir Abiri
动态语言不是鸭子类型,它们是无类型的。另一方面,结构化类型的语言,如Golang、TypeScript和OCaml是鸭子类型的。 - user12861522

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接