0

我知道案例类、模式匹配、取消应用和 PartialFunction,但我对下面的宏片段感到困惑。

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

MemberScope 的 Scaladoc http://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes $MemberScope

收集方法接受PartialFunction[Universe.Symbol, B] 我找不到unapply方法,MethodSymbol它也不是案例类的特征,所以在女巫代码编译器中转换

{ case m: MethodSymbol => m }
4

1 回答 1

3

因为MethodSymbol不是泛型类型,所以匹配

case m: MethodSymbol => m

本质上等同于

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

这里绝对没有魔法,unapply机械与这种比赛根本无关。即使在 Java 中也可以轻松完成相同的操作。

于 2014-06-05T10:50:09.257 回答