1

你如何从typeOf过滤变量?为什么检查isMethod如此简单而 isVariable 不存在?

typeOf[User].members.filter(_.isMethod)

这不是一个好主意,但它有效;):

typeOf[User].members.filter(_.toString.startsWith("variable"))
4

1 回答 1

2

有一个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,但不知何故,只有方法有自己isMethodSymbol; 其他人喜欢isVar并且isVal没有那么幸运。

于 2013-09-03T22:20:52.313 回答