문제

케이스 클래스, 패턴 일치, 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$MemberScope

수집 방법이 허용됩니다. 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