在 Scala 中创建多个对象

Create many objects in Scala

我正在努力创建一个(简单的)基于代理的模型来学习 Scala 和函数式编程。

我已经在 Python 中创建了它,所以我的想法是按照已有的想法对其进行编码,但我 运行 一开始就遇到了问题:

我有一个 class 描述了模型中的一个主体,另一个 class 描述了它所处的社会。这个社会由 N 个主体组成,其中 N 是一个整数。 在 Python 中,我会做一个列表理解来存储 class 的所有实例,但我如何在 Scala 中做到这一点?有没有比使用以下代码更好的方法:

import agent.Agent

class Society([omitted-for-brevity]){

val tmp_agents = List()

for(i <- 1 to puntos){
    val tmp_agent = new Agent(pos_X = 0, name="Agent "+i)
    tmp_agents :+ tmp_agent
}
case class Agent(pos_X: Int, name: String)
val puntos = 20
(1 to puntos)
  .foldLeft(List.empty[Agent])((a, b) => Agent(b, s"Agent {b}") :: a)
  .reverse

以上内容将帮助您为您尝试构建的程序建模。您可以使用 foldLeft 构建相同的内容,并且可以将其附加到列表中,然后反转列表。您不需要任何突变或可变数据结构。

<script src="https://scastie.scala-lang.org/CeVBrWQhQmqCtwrXuimgcA.js"></script>

您可以在 scala

中使用 map 做类似的事情
val tmp_agents = (1 to puntos).toList.map(i -> new Agent(pos_X = 0, name="Agent "+i))

如果您不关心数据的形状而只想要一个集合来容纳您的代理,则可以省略 .toList 部分

正如我常说的,Scaladoc 是你的朋友。

val agents = List.tabulate(n) { i =>
  new Agent(pos_X = 0, name=s"Agent $i")
}

(另外,我建议为您的代理使用 case class。并遵循 Scala 命名约定)