例如,需要检查一个表达式是否为整数类型:Byte、Short、Int、Long 但不是 Double 或 Float。以下代码并不总是有效:
case Apply(Select(q, n), List(rhs)) =>
if (q.tpe.weak_<:<(typeOf[Long])) true else false
对于某些 q,即使它具有 Int 类型,它们的 tpe 也不会弱一致:
a.type weak_<:< Long == false
q.symbol.typeSignature
而不是q.tpe
正常工作,但并非所有人q
都有symbol != NoSymbol