你如何从typeOf过滤变量?为什么检查isMethod如此简单而 isVariable 不存在?
typeOf[User].members.filter(_.isMethod)
这不是一个好主意,但它有效;):
typeOf[User].members.filter(_.toString.startsWith("variable"))
你如何从typeOf过滤变量?为什么检查isMethod如此简单而 isVariable 不存在?
typeOf[User].members.filter(_.isMethod)
这不是一个好主意,但它有效;):
typeOf[User].members.filter(_.toString.startsWith("variable"))
有一个isVar
方法,但它只存在于 上TermSymbol
,而不是Symbol
它本身(aTermSymbol
也可以是 a val
、方法、参数等):
typeOf[User].members.collect { case x: TermSymbol if x.isVar => x }
或与filter
:
typeOf[User].members.filter(x => x.isTerm && x.asTerm.isVar)
编辑:你说得对,这里缺乏对称性。
有几件事用 表示TermSymbol
,但不知何故,只有方法有自己isMethod
的Symbol
; 其他人喜欢isVar
并且isVal
没有那么幸运。