我正在学习 Scala,并正在学习有关提取器的教程。即https://www.tutorialspoint.com/scala/scala_extractors.htm
object ExtractDemo {
def main(args: Array[String]) {
val x = ExtractDemo(5)
println(x)
x match {
case ExtractDemo(num) => println(x+" is bigger two times than "+num)
//unapply is invoked
case _ => println("i cannot calculate")
}
}
def apply(x: Int) = x*2
def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}
但是这段代码无法编译。即
scala ExtractorDemo.scala
ExtractorDemo.scala:3: error: not found: value ExtractDemo
val x = ExtractDemo(5)
^
ExtractorDemo.scala:7: error: not found: value ExtractDemo
case ExtractDemo(num) => println(x+" is bigger two times than "+num)
^
为什么无法识别ExtractorDemo?
Scala 是一种编译语言。您应该在运行代码之前对其进行编译
$ ls
ExtractorDemo.scala
$ scalac ExtractorDemo.scala
$ ls
ExtractDemo.class ExtractDemo$.class ExtractorDemo.scala
$ scala ExtractDemo
10
10 is bigger two times than 5
您的代码适用于 Scala 3.3.3 https://scastie.scala-lang.org/DmytroMitin/eBbnjceQQXWHz0ewNpoVbg/2 和 Scala 2.13.13 https://scastie.scala-lang.org/DmytroMitin/eBbnjceQQXWHz0ewNpoVbg
请参阅开始使用。