在“Scala入门”一书中的一个例子中,脚本是:
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
}
}但是,当我试图编译这个文件,然后生成一个错误,"not ChecksumAccumulator.scala : type ChecksumAccumulator val acc = $scalac ChecksumAccumulator",有什么建议吗?
谢谢,
发布于 2011-12-30 15:49:56
“object”关键字定义的是单例对象,而不是类。所以你不能新建一个对象,' new‘关键字需要一个类。
发布于 2011-12-30 19:50:19
您可能遗漏了一些代码,如下所示
类ChecksumAccumulator { //... }
发布于 2011-12-31 00:27:49
其他答案说出问题是正确的,但并不能真正帮助你理解为什么书中的例子显然是不正确的。
但是,如果您查看Artima站点,您会发现the example is in a file here
您的代码是一个不完整的片段。该文件还包括以下行
// In file ChecksumAccumulator.scala
class ChecksumAccumulator {
private var sum = 0
def add(b: Byte) { sum += b }
def checksum(): Int = ~(sum & 0xFF) + 1
}..。如果没有它,你会得到你曾经有过的错误。
https://stackoverflow.com/questions/8677301
复制相似问题