为什么我会收到 Scala Extractor 编译错误?

问题描述 投票:0回答:1

我正在学习 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
1个回答
0
投票

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

请参阅开始使用

© www.soinside.com 2019 - 2024. All rights reserved.