无法在Scala中编译文件
根据“Scala中的Begining”一书中的示例,脚本是:无法在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
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
}
。。。如果没有它,您将得到您所犯的错误