在scala中按类型区分大小写是如何工作的



我知道大小写类,模式匹配,unapply和PartialFunction,但我对下面的宏片段感到困惑。

val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }

Scaladoc of MemberScopehttp://www.scala-lang.org/api/2.10.4/scala.reflect.api.Scopes美元MemberScope

Collect方法接受PartialFunction[Universe.Symbol, B]我找不到MethodSymbolunapply方法,它也是一个trait而不是case类,所以在witch代码编译器中转换

{ case m: MethodSymbol => m }

由于MethodSymbol不是泛型类型,所以匹配

case m: MethodSymbol => m

本质上等同于

case m if m.isInstanceOf[MethodSymbol] => m

这里绝对没有魔法,unapply机制与这种匹配根本没有关系。同样的事情在Java中也很容易做到。

相关内容

  • 没有找到相关文章

最新更新