类类型作为 Scala 映射中的键

标签 class scala types map

我的游戏有

class Enemy

谁是我可以改变的人工智能/功能
trait Moving
trait VerticalMover extends Moving
trait RandomMover extends Moving

等等。现在我需要根据特征获取预加载的东西。我想要做的是有一个 Map 接受所有扩展为键的特征,然后接受一些 EnemyContainer 作为值,这些特征将预加载与特征相关的内容。

但是我如何定义这样的 Map 以及如何格式化我的 .get() 以通过某个 Enemy 的实例获取容器。就像是:
val myEnemy = new Enemy with RandomMover 
val myDetails:EnemyContainer = enemyDetailsStore.get(myEnemy.getClass)

最佳答案

好吧,我假设您的敌人详细信息存储类型为 Map[Class[_ <: Moving], EnemyDetails] .我怀疑是这样的:

//gives a Map[Class[_ <: Moving], EnemyDetails] for all matching keys
enemyDetailsStore.filterKeys(_ isInstance myEnemy) 

或者:
//Iterable[EnemyDetails]
enemyDetailsStore collect { case (c, d) if c isInstance myEnemy => d }

或者甚至只是:
//Option[EnemyDetails]
enemyDetailsStore collectFirst { case (c, d) if c isInstance myEnemy => d }

会为你做的。这段代码唯一的“问题”是它是 O(N),因为它需要遍历 map ,而不是简单的查找,这将是 O(1) 或 O(log N)

关于类类型作为 Scala 映射中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335946/

相关文章:

python - 我无法从另一个级别的文件夹导入类

php - 将参数传递给类构造函数

scala - Play 2 json抑制空元素

scala - 有没有更好的方法来提升 Scala 中的 PartialFunction ?

java - 在Scala中,为什么我可以在这里使用 `Unit`作为返回类型?

java - 类型实例化和声明在同一行

java - java继承枚举值

c# - 命名空间 c# 中的方法

java - Scala 编译器如何处理具体的特征方法?

python - Type(3,) 返回一个整数而不是 python 中的元组,为什么?