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

What is a "<refinement>" type gotten through a TypeTag?

我有一个方法:

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

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

大多数时候,print[MyClass] 在被调用时打印 MyClass,但有时,它会打印 <refinement>?

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

改进可以解释为匿名 class 类型。例如

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>