다음 코드 : 다음과 같은 오류에스칼라 인라인 적용 취소 추출기
object Test {
@inline def unapply(i: Int): Option[String] =
i match {
case 1 => Some("Got 1")
case 2 => Some("Got 2")
case 3 => throw new Exception("Should not test 3")
case _ => None
}
def test(i: Int) = i match {
case Test(k) => k
case 4 => "Another 4"
case _ => ""
}
}
Test.test(3)
결과 : 오류의 출처가 분명 있음을
...
at Test$.unapply(<console>:13)
at Test$.test(<console>:17)
...
참고. 그러나이 오류는 메서드 unapply
이 원하는만큼 인라인되어 있지 않음을 보여줍니다.
이 적용되지 않는 방법을 어떻게 인라인 할 수 있습니까? 이것은 성능상의 이유로 코드 재사용을위한 것입니다.
잘 모르겠지만 스칼라가 메서드가 인라인되어 있어도 원래 스택 추적을 유지할 수 있습니까? – marstran
성능 향상 수준은 어느 정도입니까? – Pavel
@marstran 해체를 확인했는데 그 방법이 인라인되지 않았 음을 확인할 수 있습니다. 실제로 JVM에서는 인라인 함수에 디버그 코드를 생성 할 수 있습니다. –