Closed
Description
Minimized code
object Main {
class EThrow extends Exception
class ECatch extends Exception
def ok(): Unit =
try throw new EThrow
catch { case _: ECatch => }
def notOk(): Unit = {
val pf: PartialFunction[Throwable, Unit] = {
case e: ECatch =>
}
try throw new EThrow
catch pf
}
def test(f: => Unit): Unit =
try f catch {
case _: EThrow => println("OK")
// case e: Throwable => println("! expect an EThrow but got " + e.getClass)
}
def main(args: Array[String]): Unit = {
test { ok() }
test { notOk() }
}
}
Runtime output
[error] Exception in thread "main" scala.MatchError: Main$EThrow (of class Main$EThrow)
[error] at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:341)
[error] at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:339)
[error] at Main$$anon$1.applyOrElse(Main.scala:11)
[error] at Main$$anon$1.applyOrElse(Main.scala:11)
[error] at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:35)
[error] at Main$.notOk(Main.scala:14)
[error] at Main$.main$$anonfun$2(Main.scala:25)
[error] at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] at Main$.test(Main.scala:18)
[error] at Main$.main(Main.scala:25)
[error] at Main.main(Main.scala)
Expectation
running successfully as in scala 2 (println "OK" 2 times)