什么是通过TypeTag获得的“<refinement>”类型?

时间:2018-03-06 12:31:55

标签: scala reflection implicits

我有一个方法:

import scala.reflect.runtime.universe.{TypeTag,typeOf}

def print[T:TypeTag] = println(typeOf[T].typeSymbol.name.toString)

大多数情况下,print[MyClass]会在调用时打印MyClass,但有时会打印<refinement>

我正在研究一个相当复杂的系统(多个互连的jar,100K代码行),我似乎无法确定是什么决定它是一种行为还是另一种行为。但是,如果我知道<refinement>意味着什么,或触发了什么,也许我可以?

1 个答案:

答案 0 :(得分:2)

优化可以解释为匿名类类型。 E.g。

import scala.reflect.runtime.universe.{TypeTag,typeOf}

def print[T:TypeTag] = println(typeOf[T].typeSymbol.name.toString)

class C
trait T

print[C with T]

type A = C with T

print[A]

两种情况下的输出都是<refinement>