Scala中的类型引用机制

Scala中的类型引用机制,scala,types,Scala,Types,Scala中的类型通过两种机制引用: 一种称为“路径依赖类型”(),另一种称为“类型投影”(#) 两者的区别是什么?让我试着用例子来说明 scala> class A { | type B = Int | } defined class A scala> implicitly[Int =:= A#B] res1: Int =:= Int = <function1> scala> val a = new A a: A = A@20864cd

Scala中的类型通过两种机制引用: 一种称为“路径依赖类型”(),另一种称为“类型投影”(#)


两者的区别是什么?

让我试着用例子来说明

scala> class A {
     |   type B = Int
     | }
defined class A

scala> implicitly[Int =:= A#B]
res1: Int =:= Int = <function1>

scala> val a = new A
a: A = A@20864cd1

scala> implicitly[Int =:= a.B]
res2: Int =:= a.B = <function1>


scala> implicitly[Int =:= a#B]
<console>:12: error: not found: type a
       implicitly[Int =:= a#B]
                          ^

scala> implicitly[Int =:= A.B]
<console>:12: error: not found: value A
       implicitly[Int =:= A.B]
                          ^
scala>A类{
|类型B=Int
| }
定义的A类
scala>隐式[Int=:=A#B]
res1:Int=:=Int=
scala>val a=新a
a:a=A@20864cd1
scala>隐式[Int=:=a.B]
res2:Int=:=a.B=
scala>隐式[Int=:=a#B]
:12:错误:未找到:类型a
隐式[Int=:=a#B]
^
scala>隐式[Int=:=A.B]
:12:错误:未找到:值A
隐式[Int=:=A.B]
^

这个答案很好地解释了这一点: