【问题标题】:Get superclasses function in Scala在 Scala 中获取超类函数
【发布时间】:2012-01-09 03:01:18
【问题描述】:

在 Scala 中获取给定 Class 实例的超类的简短函数式方法是什么?

我能想到的就是这个

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

有人知道带有一些花哨功能结构的更短形式吗?

【问题讨论】:

    标签: scala functional-programming superclass


    【解决方案1】:

    不完全是花哨的功能结构,但(略)短:

    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 提供的也是如此。

    【讨论】:

    • 我们可以用if (cl == classOf[AnyRef]) List(cl) 去掉null。否则我们不妨把这个讨论带到codegolf.stackexchange.com
    • @Matthew,谢谢。编译器可能能够比我的示例更好地优化它。
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2011-06-04
    • 1970-01-01
    • 2015-11-20
    • 2019-05-11
    相关资源
    最近更新 更多