如何检查某些类型是否确认Scala宏中的泛型类型边界?

时间:2015-09-24 03:14:00

标签: scala generics macros scala-macros type-bounds

我在某个类中有以下方法:

def writeGeneric[G <: GenericTrait](value: G)

我正在使用Scala宏处理该方法。此方法的提取类型参数m.typeParams打印为type G <: GenericTraitmMethodSymbol的位置。

如何测试其他类型是否确认此类型边界? 例如,这不起作用:

typeOf[OtherType] <:< m.typeParams.head.typeSignature

1 个答案:

答案 0 :(得分:0)

我找到了带有手动边界检查的解决方案:

val typeParamSymbol = m.typeParams.head
val other = typeOf[OtherType]

val typeMatched = typeParamSymbol.typeSignature match {
    case TypeBounds(lo,hi) ⇒
        lo <:< other && other <:< hi
    case other: Type ⇒
        left <:< other
}

仍然希望有更好的解决方案。