从“在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
}
}
但是,当我尝试编译此文件时 $ scalac ChecksumAccumulator.scala,然后生成错误,“找不到:输入ChecksumAccumulator val acc = new ChecksumAccumulator”,有什么建议?
谢谢,
答案 0 :(得分:7)
'object'关键字定义单个对象,而不是类。所以你不能新建一个对象,'new'关键字需要一个类。
答案 1 :(得分:3)
你可能留下了一些看起来像
的代码class ChecksumAccumulator { // ... }
答案 2 :(得分:3)
其他答案在说明问题是什么时是正确的,但并没有真正帮助你理解为什么书中的例子显然不正确。
但是,如果你查看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
}
......没有它你就会得到你的错误。
答案 3 :(得分:2)
你的问题在这里
val acc = new ChecksumAccumulator
您不能在对象中使用new关键字。 对象无法重新实例化。您始终在scala中拥有对象的单个实例。这类似于java中的静态成员。
答案 4 :(得分:0)