0

케이스 클래스, 패턴 일치, 적용 취소 및 PartialFunction에 대해 알고 있지만 벨로우 매크로 스 니펫에 대해 혼란스러워합니다. MemberScope의유형별 케이스는 스칼라에서 어떻게 작동합니까?

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

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

수집 방법은 PartialFunction[Universe.Symbol, B] 내가 MethodSymbolunapply 방법을 찾을 수 없습니다 받아 마녀 코드에서 컴파일러는

변환 그래서, 또한 경우 클래스없는 특성이다
{ case m: MethodSymbol => m } 

답변

3

MethodSymbol은 제네릭 유형이 아니므로

case m: MethodSymbol => m 

은 절대적으로 마법이 여기에있다

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

본질적으로 동등하고, unapply 기계는 모두 같은 경기 관련이 없습니다. 자바에서도 똑같은 일을 쉽게 할 수 있습니다.

관련 문제