使用typeOf过滤变量

时间:2013-09-03 21:50:42

标签: scala reflection scala-2.10

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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表示了一些事情,但只有某些方法只有isMethod中有Symbol个方法;像isVarisVal这样的其他人并不那么幸运。