无法在Scala中编译文件

Cannot compile file in Scala

从"scala的开始"一书中的一个例子来看,脚本是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import scala.collection.mutable.Map

object ChecksumAccumulator {
 private val cache=Map[String,Int]()
 def calculate(s: String):Int =
   if(cache.contains(s))
     cache(s)
   else{
     val acc = new ChecksumAccumulator
     for(c <- s)
       acc.add(c.toByte)
     val cs=acc.checksum
      cache+= (s -> cs)
     cs
  }
}

但是,当我试图编译这个文件时$scalac checksumaccumulator.scala,然后生成一个错误,"Not found:type checksumaccumulator val acc=new checksumaccumulator",有什么建议吗?

谢谢,


对象的关键字定义Singleton对象,不是一类。所以你不能在新的对象,新的关键字"a级的要求。

检查这在Scala中的类和对象


其他的答案是正确的在说"我的问题是,为什么不帮助你理解的例子是不正确的,是从书。

然而,如果你的网站看你会找到亚泰,这里的例子是在一个文件

你的代码是一个不完整的片段。因此,线文件包括论文

1
2
3
4
5
6
// In file ChecksumAccumulator.scala
class ChecksumAccumulator {
  private var sum = 0
  def add(b: Byte) { sum += b }
  def checksum(): Int = ~(sum & 0xFF) + 1
}

……你不想让你有错误。


你可能把一些代码了,看起来像

checksumaccumulator {类//……}


你的问题在这里

1
 val acc = new ChecksumAccumulator

你不能使用new关键字的对象。对象不能被重新instantiated。你总是有一个单实例对象在斯卡拉。这是类似于Java中的静态成员。


你的代码的对象,可能是作为一个伴侣。这是这个工厂在命令式语言。

基本上,你必须对对象和类。对象(单个命令郎)CAN为多instantiated时代,这里的人已经注意到,通常用来定义一些静态逻辑。事实上,有一只instantiation——当你呼叫他的第一次。但有compaion CAN -正则对象和类,因为我想你,想念定义对象类是正则的,所以CAN看到别人,但本身。

解决方案是一个类的定义,或omit new(但我认为是错的logicaly)。