2012-09-06 9 views
0

'Programming in scala'및 Eclipse에서 컴파일 할 때 예제 중 하나에서 '오류가 발생했습니다 : ChecksumAccumulator'유형이 아래와 같이 선언됩니다. . 아래의 코드가 정확합니까? Programming in Scala에서'찾을 수 없음 : type'error

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 
    } 
} 
+0

(은'새 ChecksumAccumulator' 라인 인스턴스를 생성 단지 동반하는 객체이다 :

scalac ChecksumAccumulator.scala Summer.scala 

그런 다음 당신에게 아래의 출력을 줄 것이다

scala Summer of love 

와 예제를 실행 여기서는이 책의 앞부분에있는 몇 페이지의 클래스 정의도 필요하다 (Listing 4.1). –

+0

@Travis Brown 옙 그 것이었다. 한 번 책을 읽지 말고 페이지를 리콜했다는 말은하지 말아라. –

+0

Nope- 그냥 예를 기억하고 Google이 나머지를했습니다. –

답변

1

은 :

이 그림의 싱글 객체는 ChecksumAccumulator, 앞의 예에서 클래스와 동일한 이름으로 지정됩니다. 싱글 톤 개체가 클래스와 동일한 이름을 공유하면이를 해당 클래스의 동반 개체라고합니다. 동일한 소스 파일에 클래스와 그 부속 장치 인 오브젝트를 모두 정의해야합니다. 이 클래스는 싱글 톤 객체의 동반 클래스 이라고합니다. 당신이 ChecksumAccumulator 클래스없이 혼자이 코드를 컴파일 할 경우 new로 싱글 톤 개체의 인스턴스를 만들 수 없기 때문에

, 당신은 컴파일러 오류가 발생합니다. 이 책은 동반자 객체와 클래스가 함께 작동하는 방법을 설명하는 훌륭한 작업을 수행하며 이미 읽었으므로 여기서 더 이상 요약 할 필요가 없습니다.

0

문제는 책 클래스에 너무 일찍 나중에 ChecksumAccumulator.scala 클래스 정의가없는 파일에 정의되어 있다는 점이다. 초보자에게는 오도하는 것으로 충분하고 붙어있을 것입니다. 이것은 두 파일의 완전한 코드 여야합니다.

import ChecksumAccumulator.calculate 
object Summer { 
def main(args: Array[String]) { 
    for (arg < -args) 
    println(arg + ": " + calculate(arg)) 
} 
} 

Summer.scala에서

import scala.collection.mutable.Map class ChecksumAccumulator { private var sum = 0 def add(b: Byte) { sum += b } def checksum(): Int = ~(sum & 0xFF) + 1 } 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 } } 

ChecksumAccumulator.scala
에서 그럼 당신은 사용하여 컴파일 할 수 있습니다.

of: -213 
love: -182