【问题标题】:How write two main function in neighbouring actors?如何在相邻actor中编写两个主要函数?
【发布时间】:2014-10-27 17:12:38
【问题描述】:

我正在尝试使用 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")
}

其他演员

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 idea 运行 main 函数(来自 OtherActor 和 HelloActor)并得到编译错误:

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

为什么我会得到它?主要功能放在不同的文件中!如何在 scala/akka 中编写 2 个主要功能并从相邻的 actor 中运行它们?

还有空的不扩展actor主函数工作的scala类,这里是代码:

一级

package akkaSample.mainError

class One {

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

二级

package akkaSample.mainError

class Two {

}

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

没有编译错误。

P.S.这只是为了试验,我不打算将具有两个主要功能的代码投入生产。

【问题讨论】:

  • 我用 sbt 编译了代码,我收到了同样的错误,也有原始的 scalac。 scalac src/main/scala/akkaSample/mainError/One.scala src/main/scala/akkaSample/mainError/Two.scala

标签: scala intellij-idea akka main intellij-13


【解决方案1】:

您已经定义了两次同名的对象。编译器无法区分这两者。

扩展App 的对象不需要称为Main。您可以拨打一个HelloActorMain 和另一个OtherActorMain。在这种情况下,sbt 会让你选择运行哪个主类。

【讨论】:

  • 但是为什么两个没有扩展 Actor trait 的空类不会产生编译时错误? (请参阅问题中的 onetwo 类)
【解决方案2】:

编译器错误说明了一切:您正在尝试定义一个名为 akkaSample.severalSystems.Main 的对象,但已经存在同名的对象。这是不可能的,因为编译器需要为两者生成一个同名的 JVM 类(akkaSample.severalSystems.Main$),所以它们不能同时加载;此外,它们必须写在同名文件(Main$.class)和同一个目录中。

我更好奇为什么您的第二个示例没有产生错误 - 但它肯定与您的两个对象有关,不仅名称相同,而且完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多