Scala独立对象无法识别

时间:2017-01-06 12:32:02

标签: scala class object

我正在使用脚本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

虽然我已将独立对象声明为顶部,但是我的独立对象可能无法被识别。

或者是由于其他一些错误?

1 个答案:

答案 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()
  }
}