加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

类型在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读