tri*_*oid 0 reflection scala scala-reflect
他们引用相同的东西,但是当我比较2个类型标签时:
val ttg1 = typeTag[Map[_,_]]
val ttg2 = typeTag[immutable.Map[_,_]]
assert(ttg1.tpe == ttg2.tpe)
Run Code Online (Sandbox Code Playgroud)
我有:
Map[_, _] did not equal scala.collection.immutable.Map[_,_]
ScalaTestFailureLocation:
Expected :scala.collection.immutable.Map[_,_]
Actual :Map[_, _]
Run Code Online (Sandbox Code Playgroud)
怎么会用键入的语言发生?我如何使它们相同?
更新:对于列表这更令人困惑:
val ttg1 = typeTag[List[_]]
val ttg2 = typeTag[immutable.List[_]]
assert(ttg1.tpe == ttg2.tpe)
List[_] did not equal List[_]
ScalaTestFailureLocation:
Expected :List[_]
Actual :List[_]
Run Code Online (Sandbox Code Playgroud)
他们是完全一样的!然而,反思选择忽视它.
当你真的想要类型等价时,你正在比较类型标识.在
type A = B
Run Code Online (Sandbox Code Playgroud)
A并且B是两种不同的类型(这就是为什么它们有不同的类型标签).尝试将测试更改为
assert(ttg1.tpe =:= ttg2.tpe)
Run Code Online (Sandbox Code Playgroud)
=:= 关于类型测试的等价性.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |