2013-09-03 2 views
1

Как фильтровать переменные от typeOf? Почему проверка isMethod настолько проста и isVariable не существует?Фильтровать переменные с помощью типаOf

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

Это не очень хорошая идея, но она работает;):

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

ответ

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 in Symbol; Другие, такие как isVar и isVal, не были так удачливы.

+0

Спасибо! Знаете ли вы, какой хороший и простой;) учебник о новом отражении? – Etam

+0

Я знаю только о [официальном руководстве по размышлениям] (http://docs.scala-lang.org/overviews/reflection/overview.html). Особенно те части, которые связаны с этим внутренним отражением * словарем *, как Вселенные, Зеркала, Символы, Типы, Деревья, Имена, Области ... – gourlaysama

Смежные вопросы