2014-07-25 719 views
9

Scala具有路径依赖类型,但据说Scala不支持依赖类型。路径依赖类型和依赖类型之间有什么区别?路径依赖类型和依赖类型之间有什么区别?

据我所知,路径依赖类型是一种依赖类型。

+6

查看Miles Sabin的答案[here](http://stackoverflow.com/a/12937819/334519)到一个类似的问题(你的问题更好,因此我不会重复)。 –

回答

2

依赖类型是一种依赖于值的类型。路径依赖类型是一种特定类型的依赖类型,其中类型取决于路径。

我不确定在Scala社区之外是否存在术语“路径依赖类型”。无论如何,问题是,什么是路径?对于Scala,这是在language specification中定义的:基本上它是对非变量值的一系列选择a.b.c...

的路径依赖型是具有路径的类型,例如在a.T

class A { type T; def f: T } 
def f(a: A): a.T = a.f 

还有其他种依赖类型。例如,在Scala中,pending proposal将基于文字的类型添加到该语言中,以便您可以编写val x: 42.type = 21 + 21

为了键入检查使用依赖类型的程序,类型系统(和编译器)需要知道这些值及其操作的语义。 Scala编译器知道选择的语义,并可以决定两个路径是否相同。对于使用基于文本的类型的示例,编译器需要进行扩展,以了解整数意味着什么。