如何从typeOf中筛选变量?为什么检查isMethod如此简单,而且isVariable不存在?
typeOf[User].members.filter(_.isMethod)
这不是一个好主意,但它是有效的;):
typeOf[User].members.filter(_.toString.startsWith("variable"))
有一个isVar
方法,但它只存在于TermSymbol
上,而不存在于Symbol
本身(TermSymbol
也可以是val
、方法、参数等):
typeOf[User].members.collect { case x: TermSymbol if x.isVar => x }
或使用filter
:
typeOf[User].members.filter(x => x.isTerm && x.asTerm.isVar)
编辑:你说得对,这里缺乏对称性。
有几个东西用TermSymbol
表示,但不知何故,只有方法在Symbol
中有自己的isMethod
;像CCD_ 10和CCD_。