0

私は 'Programming in scala' を読んでいますが、Eclipse でコンパイルしようとするとエラーが表示されます: 'not found: type ChecksumAccumulator' 型は以下のように宣言されています。以下のコードは正しいですか?

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.toBye)
      val cs = acc.checksum()
      cache += (s -> cs)
      cs
    }
}
4

2 に答える 2

1

Scalaでのプログラミングから:

この図のシングルトンオブジェクトのChecksumAccumulator名前は、前の例のクラスと同じです。シングルトンオブジェクトがクラスと同じ名前を共有する場合、そのクラスのコンパニオンオブジェクトと呼ばれます。クラスとそのコンパニオンオブジェクトの両方を同じソースファイルで定義する必要があります。このクラスは、シングルトンオブジェクトのコンパニオンクラスと呼ばれます。

クラスなしでこのコードを単独でコンパイルしようとするとChecksumAccumulator、でシングルトンオブジェクトのインスタンスを作成できないため、コンパイラエラーが発生しますnew。この本は、コンパニオンオブジェクトとクラスがどのように連携するかを説明するのに最適です。すでに読んでいるので、ここに要約を追加する必要はありません。

于 2012-09-06T20:33:26.533 に答える