Получить функцию суперклассов в Scala - PullRequest
3 голосов
/ 29 ноября 2011

Каким был бы короткий функциональный способ получить суперклассы данного экземпляра класса в Scala?

Все, что я мог придумать, это:

def supers(cl: Class[_]): List[Class[_]] = {
  cl :: Option(cl.getSuperclass).map(supers).getOrElse(Nil)
}

Кто-нибудь знает более короткийформа с некоторыми причудливыми функциональными конструкциями?

1 Ответ

4 голосов
/ 30 ноября 2011

Не совсем причудливые функциональные конструкции, но (немного) короче:

def supers(cl: Class[_]): List[Class[_]] = {
    if (cl == null) Nil else cl :: supers(cl.getSuperclass)
}

scala> class Foo; class Bar extends Foo; class Baz extends Bar
defined class Foo
defined class Bar
defined class Baz

scala> supers(classOf[Baz])
res9: List[Class[_]] = List(class Baz, class Bar, class Foo, class java.lang.Object)

Обратите внимание, что это дает вам класс и все его суперклассы, но, опять же, то же самое делает тот, который предоставляется OP.1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...