'classOf' 表达式如何在 scala AST 中表示
How is 'classOf' expression represented in scala AST
我是 Scala AST 概念的新手。
我需要遍历包含如下表达式的 Scala 代码树:
classOf[org.apache.commons.lang3.ArrayUtils]
我需要能够在 scala.reflect.internal.Trees.Tree
上进行模式匹配时识别这种情况。
例如我知道它不是case _:Apply
要成功匹配此表达式,正确的模式是什么?
一个classOf[C]
表示为一个Literal(value)
,其中value.tag == ClazzTag
,而value.typeValue
是一个Type
表示C
。您可以将其匹配为:
case Literal(value) if value.tag == ClazzTag =>
val tpe = value.typeValue
// do something with `tpe`
有关 real-world 示例,请参阅 https://github.com/scala-js/scala-js/blob/ec5b328330276b9feb20cccadd75e19d27e887d3/compiler/src/main/scala/org/scalajs/nscplugin/GenJSCode.scala#L2043。
我是 Scala AST 概念的新手。
我需要遍历包含如下表达式的 Scala 代码树:
classOf[org.apache.commons.lang3.ArrayUtils]
我需要能够在 scala.reflect.internal.Trees.Tree
上进行模式匹配时识别这种情况。
例如我知道它不是case _:Apply
要成功匹配此表达式,正确的模式是什么?
一个classOf[C]
表示为一个Literal(value)
,其中value.tag == ClazzTag
,而value.typeValue
是一个Type
表示C
。您可以将其匹配为:
case Literal(value) if value.tag == ClazzTag =>
val tpe = value.typeValue
// do something with `tpe`
有关 real-world 示例,请参阅 https://github.com/scala-js/scala-js/blob/ec5b328330276b9feb20cccadd75e19d27e887d3/compiler/src/main/scala/org/scalajs/nscplugin/GenJSCode.scala#L2043。