【发布时间】:2017-12-19 01:24:55
【问题描述】:
在下面的代码中,我试图了解Foo#unapply : Option[Int] 在模式匹配方面的用法。
$ls
Test.scala
$cat Test.scala
object Test {
case class Foo(x: Int)
def f(foo: Foo): Unit = foo match {
case Foo(_) => ()
}
}
编译:
$scalac Test.scala
$ls
Test$.class Test$Foo$.class Test$Foo.class Test.class Test.scala
我在每个 *class 文件上运行了 javap -c -v X.class | grep unapply。但是,我没有找到任何结果。
请解释Foo#unapply 是如何用于模式匹配的。另外,在哪里可以找到对应的JVM字节码指令?
【问题讨论】:
-
您可以看到 scala 指令在执行
scalac -Xprint:typer Test.scala,您可以查看更多阶段以查看模式匹配如何扩展,例如在阶段pickler -
您可以在
f的正文中找到Test$.class中发生的事情。尽管您的用例很简单,但它非常简化。要查看更多信息,请尝试case class Foo(x: Int, s: String)并实际使用匹配值。
标签: scala