无法在Scala中编译文件

无法在Scala中编译文件,scala,Scala,根据“Scala中的Begining”一书中的示例,脚本是: 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 ChecksumAccumulat

根据“Scala中的Begining”一书中的示例,脚本是:

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
  }
}
导入scala.collection.mutable.Map
对象校验累加器{
private val cache=Map[String,Int]()
def计算(s:字符串):Int=
if(缓存包含)
高速缓存
否则{
val acc=新的支票金额累加器
(c)政务司司长
反恐精英
}
}
但是,当我试图编译这个文件时 $scalac checksumcumulator.scala,然后生成一个错误,“未找到:键入checksumcumulator val acc=new checksumcumulator”,有什么建议吗


谢谢,

'object'关键字定义的是单例对象,而不是类。因此不能新建对象,“new”关键字需要一个类

检查此项

您的问题在这里

 val acc = new ChecksumAccumulator
不能对对象使用new关键字。
无法重新实例化对象。scala中始终只有一个对象实例。这类似于java中的静态成员。

您可能遗漏了一些类似于

类校验累加器{ //...
}

您的代码,可能是作为对象的。这有点像命令式语言

基本上,您有对象对。对象(命令式语言中的单例)不能被多次实例化,正如这里的人们已经指出的,并且通常用于定义一些静态逻辑。事实上,只有一个实例——当你第一次给他打电话时。但对象可以有Compion——正则类,而且,正如我认为你们已经错过了那个正则类的定义,所以对象只能看到它自己,不能看到其他任何人


解决方法是定义该类,或者省略
new
(但我认为这在逻辑上是错误的)。

其他答案在说明问题所在时是正确的,但并不能真正帮助您理解书中的示例显然不正确的原因

然而,如果你看看Artima网站,你会发现

您的代码是一个不完整的片段。该文件还包括这些行

// In file ChecksumAccumulator.scala
class ChecksumAccumulator {
  private var sum = 0
  def add(b: Byte) { sum += b }
  def checksum(): Int = ~(sum & 0xFF) + 1
}
。。。如果没有它,您将得到您所犯的错误