2012-02-07 41 views
2

我是繼typesafe stack tutorial,並可能沒能解決此問題:找不到和類型安全堆棧缺少參數入門指南

> reload 
[info] Building project Tutorial 1 1.0 against Scala 2.9.1 
[info] using TutorialOneProject with sbt 0.7.7 and Scala 2.7.7 
> compile 
[info] 
[info] == compile == 
[info] Source analysis: 1 new/modified, 0 indirectly invalidated, 0 removed. 
[info] Compiling main sources... 
[error] /home/carlos/workspaces/scala/tutorial-1/src/main/scala/Pi.scala:3: not found: object Actor 
[error] import Actor._ 
[error]  ^
[error] /home/carlos/workspaces/scala/tutorial-1/src/main/scala/Pi.scala:34: missing parameter type for expanded function 
[error] The argument types of an anonymous function must be fully known. (SLS 8.5) 
[error] Expected type was: ? 
[error]  def receive = { 
[error]     ^
[error] /home/carlos/workspaces/scala/tutorial-1/src/main/scala/Pi.scala:58: missing parameter type for expanded function 
[error] The argument types of an anonymous function must be fully known. (SLS 8.5) 
[error] Expected type was: <error> 
[error]  def receive: { 
[error]      ^
[error] three errors found 
[info] == compile == 
[error] Error running compile: Compilation failed 
[info] 
[info] Total time: 2 s, completed 07/02/2012 01:51:56 

我想知道太多,爲什麼它說,它的使用2.7.7階而不是2.9.1 ...

我的代碼只是如下:

package akka.tutorial.first.scala 

import Actor._ 
import akka._ 
import Routing._ 

import java.util.concurrent.CountDownLatch 

object Pi extends App { 

    calculate(nrOfWorkers = 4, nrOfElements = 10000, nrOfMessages = 10000) 

    sealed trait PiMessage 
    case object Calculate extends PiMessage 
    case class Work(start: Int, nrOfElements: Int) extends PiMessage 
    case class Result(value: Double) extends PiMessage 

    class Worker extends Actor { 

    def calculatePiFor(start: Int, nrOfElements: Int): Double = { 
      var acc = 0.0 
     for (i <- start until (start + nrOfElements)) 
     acc += 4.0 * (1 - (i % 2) * 2)/(2 * i + 1) 
     acc 
    } 

    def receive = { 
     case Work(start, nrOfElements) => 
     self reply Result(calculatePiFor(start, nrOfElements)) 
    } 
    } 

    class Master(
    nrOfWorkers: Int, nrOfMessages: Int, nrOfElements: Int, latch: CountDownLatch) 
    extends Actor { 

    var pi: Double = _ 
    var nrOfResults: Int = _ 
    var start: Long = _ 

    val workers = Vector.fill(nrOfWorkers)(actorOf[Worker].start()) 

    val router = Routing.loadBalancerActor(CyclicIterator(workers)).start() 

    def receive: { 
     case Calculate => 
     for (i <- 0 until nrOfMessages) router ! Work(i * nrOfElements, nrOfElements) 

     router ! Broadcast(PoisonPill) 

     router ! PoisonPill 

     case Result(value) => 
     pi += value 
     nrOfResults += 1 
     if (nrOfResults == nrOfMessages) self.stop() 
    } 

    override def preStart() { 
     start = System.currentTimeMillis 
    } 

    override def postStop() { 
     println(
     "\n\tPi estimate: \t\t%s\n\tCalculation time: \t%s millis" 
     .format(pi, (System.currentTimeMillis - start))) 
     latch.countDown() 
    } 
    } 

    def calculate(nrOfWorkers: Int, nrOfElements: Int, nrOfMessages: Int) { 

    val latch = new CountDownLatch(1) 

    val master = actorOf(
     new Master(nrOfWorkers, nrOfMessages, nrOfElements, latch)).start() 

    master ! Calculate 

    latch.await() 
    } 
} 

我知道這個問題是用什麼類型,但是,我不知道斯卡拉太多,因此, ,我不知道如何解決它。

有人知道如何解決這個問題嗎?

在此先感謝。

+1

您應該先導入akka.actor.Actor。此外,您的代碼與教程中的代碼看起來略有不同。可能你想讓教程先按原樣運行 – aishwarya 2012-02-07 06:06:50

+0

我已經嘗試過了,並且試圖將其付諸實施,無論如何,我已經編輯了該問題。你可以考慮入門代碼:) – caarlos0 2012-02-07 09:47:02

回答

1

我只是改變我的進口:

import akka.actor.{Actor, PoisonPill} 
import Actor._ 
import akka.routing.{Routing, CyclicIterator} 
import Routing._ 
import akka.dispatch.Dispatchers 

和它的工作:)

感謝大家。

0

演員akka包的成員。因此,你應該重新排序進口的條款使得阿卡包至上:

import akka._ 
import Actor._ 
import Routing._ 

這是否幫助?順便說一句:你在內部使用的sbt(構建工具)的版本可以在Scala 2.7.7中使用,但是你的項目是針對Scala 2.9.1構建的。請看完整的郵件;-)

+1

我的技能獲得'/home/carlos/workspaces/scala/tutorial-1/src/main/scala/Pi.scala:4:not found:object演員 [error] import Actor ._' – caarlos0 2012-02-07 09:34:26