【发布时间】:2017-04-13 12:23:09
【问题描述】:
以下代码:
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 没有按照我的意愿内联。
我怎样才能内联这个 unapply 方法?这是出于性能原因以及代码重用。
【问题讨论】:
-
我不确定,但即使方法是内联的,Scala 能否保持原始堆栈跟踪?
-
您期望性能提升到什么水平??
-
@marstran 我检查了反汇编,我可以确认该方法没有内联。事实上,JVM 允许在内联函数上生成调试代码。
-
@Pavel A 升级。
-
“检查异常错误列表”是什么意思?通常在反汇编文件底部的那个?据我所知,没有。