例如,需要检查表达式是否为整数类型: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
答案 0 :(得分:2)
而不是q.tpe
应使用q.tpe.widen
:
case Apply(Select(q, n), List(rhs)) =>
if (q.tpe.widen.weak_<:<(typeOf[Long])) true else false
Int weak_<:< Long == true