代码之家  ›  专栏  ›  技术社区  ›  holbech

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

  •  0
  • holbech  · 技术社区  · 8 年前

    我有一个方法:

    import scala.reflect.runtime.universe.{TypeTag,typeOf}
    
    def print[T:TypeTag] = println(typeOf[T].typeSymbol.name.toString)
    

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

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Evgeny    8 年前

    优化可以解释为匿名类类型。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> 在这两种情况下。