0

它们指的是同一件事,但是当我比较 2 种类型标签时:

val ttg1 = typeTag[Map[_,_]]
val ttg2 = typeTag[immutable.Map[_,_]]

assert(ttg1.tpe == ttg2.tpe)

我有:

Map[_, _] did not equal scala.collection.immutable.Map[_,_]
ScalaTestFailureLocation: 
Expected :scala.collection.immutable.Map[_,_]
Actual   :Map[_, _]

这怎么会在打字语言中发生?我如何使它们相同?

更新:对于 List 这更令人困惑:

val ttg1 = typeTag[List[_]]
val ttg2 = typeTag[immutable.List[_]]

assert(ttg1.tpe == ttg2.tpe)

List[_] did not equal List[_]
ScalaTestFailureLocation: 
Expected :List[_]
Actual   :List[_]

它们是完全一样的!然而反射选择忽略它。

4

1 回答 1

6

当您似乎真的想要类型等效时,您正在比较类型标识。在

type A = B

A并且B是两种等效的不同类型(这就是它们具有不同类型标签的原因)。尝试将您的测试更改为

assert(ttg1.tpe =:= ttg2.tpe)

=:=关于类型测试等价。

于 2017-12-30T05:35:52.280 回答