2014-09-03 5 views
0
내가 akka을 실험하고

, 나는 그들에 주요 기능을 가진 두 개의 더미 배우를 작성했습니다 :이웃 배우들에게 두 가지 주요 기능을 쓰는 방법은 무엇입니까?

HelloActor

package akkaSample.severalSystems 

import akka.actor.{Actor, ActorSystem} 

class HelloActor extends Actor { 
    def receive = { 
    case "mew" => println("I said mew") 
    case "hello" => println("hello back at you") 
    case "shutdown" => context.stop(self) 
    case _  => println("huh?") 
    } 
} 
object Main extends App { 
    val system = ActorSystem("HelloSystem") 
    println("started") 
} 

OtherActor

package akkaSample.severalSystems 

import akka.actor.{Actor, ActorSystem} 

class OtherActor extends Actor { 
    def receive = { 
    case "mew" => println("I said mew") 
    case _  => println("huh?") 
    } 
} 

object Main extends App { 
    val system = ActorSystem("HelloSystem") 
    println("started") 
} 

내가 주를 실행하려고 intellij 아이디어 (둘 다 OtherActor 및 HelloActor)에서 함수를 가져오고 컴파일 오류가 발생합니다 :

Error:(12, 8) Main is already defined as object Main 
object Main extends App { 
    ^

왜 내가 얻습니까? 주요 기능은 다른 파일에 배치됩니다! scala/akka에 2 개의 주요 함수를 쓰고 이웃 배우로부터 어떻게 실행합니까? 하지 않는 빈 스칼라 클래스와 또한

여기, 배우 주요 기능 작업을 확장 코드 :

클래스 하나

package akkaSample.mainError 

class One { 

} 
object Main extends App { 
    println("Hi!") 
} 

클래스 두

package akkaSample.mainError 

class Two { 

} 

object Main extends App { 
    println("Hi!") 
} 

컴파일 오류가 없습니다.

P. 실험을 위해서 단지 두 가지 주요 기능을 갖춘 코드를 제작에 포함시키려는 계획이 아닙니다.

+0

나는 sbt를 사용하여 코드를 컴파일했으며 원시 오류 코드도 같은 오류가 발생했습니다. 'scalac src/main/scala/akkaSample/mainError/One.scala src/main/scala/akkaSample/mainError/Two.scala' –

답변

1

같은 이름의 오브젝트를 두 번 정의했습니다. 컴파일러가이 둘을 구분할 방법이 없습니다.

App을 확장하는 개체는 Main이라고 부를 필요가 없습니다. HelloActorMain 및 기타 OtherActorMain으로 전화 할 수 있습니다. 이 경우 sbt를 사용하면 실행할 기본 클래스를 선택할 수 있습니다.

+0

그러나 Actor 특성을 확장하지 않는 두 개의 빈 클래스가 컴파일 타임 오류를 생성하지 않는 이유는 무엇입니까? (질문에''one''과'two'' 클래스를보세요) – Cherry

1

컴파일러 오류로 인해 akkaSample.severalSystems.Main이라는 객체를 정의하려하지만 동일한 이름의 객체가 이미 있습니다. 이것은 컴파일러가 양쪽 모두에 같은 이름의 JVM 클래스 (akkaSample.severalSystems.Main $)를 생성 할 필요가 있기 때문에 가능하지 않기 때문에 동시에로드 할 수 없습니다. 게다가, 그들은 같은 이름 (Main $ .class)과 같은 디렉토리에있는 파일로 작성되어야합니다.

두 번째 예제가 오류를 생성하지 않는 이유에 대해 더 궁금해합니다.하지만 확실히 동일한 이름을 가진 것이 아니라 정확히 동일한 두 개체와 관련이 있습니다.