我正在使用脚本xyz.scala创建一个单例对象,如下所示:
object ChecksumCalculator {
def calcChecksum(s: String): Int = {
val cc = new ChecksumCalculator
for (c <- s)
cc.add(c.toByte)
cc.checksum
} }
当我将此作为脚本Scala xyz.scala
运行时,
我收到的错误是:
01HW993798:scala tcssig$ scalac xyz.scala
xyz.scala:3: error: not found: type ChecksumCalculator
val cc = new ChecksumCalculator
^
one error found
虽然我已将独立对象声明为顶部,但是我的独立对象可能无法被识别。
或者是由于其他一些错误?
答案 0 :(得分:1)
在scala中,单例对象在使用时被实例化,并保证仅实例化一次,因此提供严格的“单例”语义。
假设你的对象有方法“add(b:Byte)”,你可以这样做:
CheckSumCalculator.add(c.toByte)
但鉴于我们处于CheckSumCalculator
的范围内,使用它应该足够了:
add(c.toByte)
也就是说,使用单例对象进行可变操作似乎是一个坏主意。
看起来你正在寻找的是创建某个类的实例,但也有一些可以静态调用的设施方法。
该构造在Scala中有一个名称:A companion object
伴侣对象是通过创建与某个给定类同名的对象来定义的。
将其转换为这种情况,我们会:
class ChecksumCalculator {
def add(b:Byte) = ???
def checksum(): Int = ??? // or whatever type the checksum is
}
object ChecksumCalculator { // this is a companion object
def calcChecksum(s: String): Int = {
val cc = new ChecksumCalculator
s.foreach(c => cc.add(c.toByte))
cc.checksum()
}
}