目前推荐的Scala家族多态性模式是什么?
在尝试对游戏建模的方法时,此解决方案最近出现了:
trait Game[G <: Game[G]] {
type PLAYER <: Player[G]
type STATE <: State[G]
def players(): Set[G#PLAYER]
def startState(): G#STATE
}
trait Player[G <: Game[G]]
trait State[G <: Game[G]] {
def player(): G#PLAYER
}
可以根据以下特征来表达特定的游戏(在本示例中为扑克):
class Poker() extends Game[Poker] {
type PLAYER = PokerPlayer
type STATE = PokerState
val p1 = new PokerPlayer()
def players() = Set(p1)
def startState(): PokerState = ...
}
class PokerPlayer() extends Player[Poker]
class PokerState() extends State[Poker] {
def player(): PokerPlayer = ...
}
我对此设置有几个疑问:
Game[G <: Game[G]]
”吗?在这种情况下G
和Game
扮演的角色的名称是什么? (特别是在这种“递归”关系中。)最佳答案
我会质疑是否有必要在特征的“外部”定义所有类。 Player
和State
类型已经依赖于Game,因此您无需尝试进一步限制它。
trait Game {
type Player
type State <: StateLike
trait StateLike {
def player: Player
}
def startState: State
}
class Poker extends Game {
class Player
class State extends StateLike { ... }
val startState = new State
}
如果需要,可以使用蛋糕图案将不同的部分分离为不同的特征/文件。
trait PokerPlayer extends Game {
class Player
}
trait PokerState extends Game with PokerPlayer {
class State extends StateLike { ... }
}
class Poker extends Game with PokerPlayer with PokerState {
val startState = ...
}
关于scala - Scala中的家庭多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14133748/