我了解案例类、模式匹配、unapply 和 PartialFunction,但我对下面的宏片段感到困惑。

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

MemberScope 的 Scaladochttp://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes$成员范围

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

{ case m: MethodSymbol => m }
有帮助吗?

解决方案

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

case m: MethodSymbol => m

本质上相当于

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

这里绝对没有魔法,而且 unapply 机械与此类比赛根本无关。即使在 Java 中也可以轻松完成同样的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top