Я использую Scala 2.10.1, и я пытаюсь определить метод, который будет извлекать все vals (включая унаследованные) из объекта.Не удается получить унаследованные vals с отражением Scala
У меня есть следующие:
import scala.reflect.runtime.{universe => ru}
object Reflection {
val mirror = ru.runtimeMirror(this.getClass.getClassLoader)
def findVals(x: Any): Iterable[String] = {
val theType = mirror.classSymbol(x.getClass).toType
theType.members.collect({case x if x.isTerm => x.asTerm}).filter(_.isVal).map(_.name.toString)
}
}
Я тестирование этих двух классов:
class Base {
val x = 10
}
class Child extends Base {
val y = 20
}
При вызове следующий код:
val x = new Child
val vs = Reflection.findVals(x)
println(vs)
Результат является List(y)
По какой-то причине метод isVal
возвращает false
для термина, соответствующего полю x
, из класса Base
.
Может кто-нибудь сказать мне, в чем проблема? Я делаю что-то неправильно?
Пожалуйста, смотрите http://stackoverflow.com/questions/15784320/enumerate-the-fields-of-a-subclass-in-scala/15785798#15785798 –
Это действительно Безразлично Ответь на мой вопрос –
О, извините. Я неправильно понял проблему. –