0

例如,需要检查一个表达式是否为整数类型: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

4

1 回答 1

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
于 2013-10-04T13:54:52.293 回答