Scala:如何声明两个相互依赖的类

时间:2015-05-05 18:50:05

标签: scala class

所以基本上我正在开始scala,我正在尝试构建一个简单的RPG脚本来习惯这种语言。我遇到的第一个问题是如何声明一个类Character和一个类Ennemy,知道每个都有使用另一个类的实例作为参数的方法。我没有在其他语言中遇到过这个问题(或者他们有一种说法:嘿我正在使用其他类,但除非你被调用,否则不会实例化任何东西),在Scala这里我有以下错误:not发现:输入Ennemy。

我想在某个地方有一个关键词,但我找不到它。

由于

编辑:对不起我没有合并代码,基本上我把它剥离到了这个:

class Character {
  var name = ""
  def slain(e:Ennemy) = println(this.name + " has slain ennemy " + e.name)
} 

class Ennemy {
  var name = ""
  def slain(c:Character) = println(this.name + " has slain character " +     c.name)
}

代码仍然无法编译并返回上述错误。

1 个答案:

答案 0 :(得分:2)

如果你在scala repl中,你需要同时定义它们以避免这种情况。这是因为每个表达式一次运行一个,如果你不能引用尚未定义的东西。

请注意,对于.scala源文件中定义的类,这不是问题。

您可以使用:paste一次定义多个内容。

scala> :paste
// Entering paste mode (ctrl-D to finish)

class Character {
  var name = ""
  def slain(e:Ennemy) = println(this.name + " has slain ennemy " + e.name)
} 

class Ennemy {
  var name = ""
  def slain(c:Character) = println(this.name + " has slain character " +     c.name)
}

// Exiting paste mode, now interpreting.

defined class Character
defined class Ennemy

其他说明:

  • 拼写为Enemy
  • 你可以考虑给这两个父类
trait Entity {
  var name = ""
  def slain(e: Entity) = println(this.name + " has slain enemy " + e.name)
}
class Character extends Entity
class Enemy extends Entity

这确实意味着角色和敌人可以杀死他们自己的类型。您可以通过不同方式对其进行定义以避免这种情况,但我会省略它们,因为我认为它比您现在需要的更复杂。