scala 中按类型区分大小写是如何工作的?
-
26-12-2019 - |
题
我了解案例类、模式匹配、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 中也可以轻松完成同样的事情。
不隶属于 StackOverflow