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正しく動作しますが、すべてが機能しているわけではありませqsymbol != 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 に答える