类型在Scala中作为键的键
发布时间:2020-12-16 19:18:01 所属栏目:安全 来源:网络整理
导读:我的游戏有 class Enemy 谁可以改变我的人工智能/功能 trait Movingtrait VerticalMover extends Movingtrait RandomMover extends Moving 等等.现在我需要根据特征获取预加载的东西.我想要做的是有一个Map接受所有延伸移动的特征,然后将一些EnemyContainer
我的游戏有
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),因为它需要遍历映射,而不是简单的查找,即O(1)或O(log N) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |