3
下面的代碼:斯卡拉直列不應用提取
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
方法沒有按照我的意圖進行內聯。
我該如何內聯這種不適用的方法?這是出於性能原因以及代碼重用。
我不確定,但即使該方法是內聯的,Scala可以保持原始的堆棧跟蹤嗎? – marstran
你期待什麼水平的性能改進? – Pavel
@marstran我檢查了反彙編,我可以確認該方法沒有內聯。事實上,JVM允許在內聯函數上生成調試代碼。 –