重用案例类的实例

时间:2014-12-25 08:18:46

标签: scala memory-management case-class

假设我的应用程序在很长一段时间内反复使用了很多Move个对象,其中Move的定义如下:

sealed trait Player
case object P1 extends Player
case object P2 extends Player
case object P3 extends Player
case object P4 extends Player

sealed trait Key
case object Up extends Key
case object Down extends Key
case object Right extends Key
case object Left extends Key
case object Space extends Key

sealed trait Action
case object Press extends Action
case object Release extends Action

case class Input(key: Key, action: Action)
case class Move(input: Input, player: Player)

这是10个不同的可能Input和40个不同的Move。有没有办法让编译器通过创建所有可能的Move一次并重新使用实例来优化这些类型?

1 个答案:

答案 0 :(得分:4)

您可以使用标量Memo

val moveCache = Memo.mutableHashMapMemo{ip: (Input, Player) => Move(ip._1, ip._2)}
....
val myMove = moveCache((myInput, myPlayer))

老实说,我非常怀疑这会对性能产生重大影响。在使代码不易阅读之前,请确保您有清晰的分析结果,表明它实际上会产生您认为的差异。