Scala'da aile polimorfizmi için şu anki önerilen model nedir? Scala'da Aile Polimorfizmi
modelleme oyunların yolları deneme ederken, bu çözüm son zamanlarda ortaya çıkan: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
}
spesifik bir oyun (bu örnekte Poker) şöyle bu özelliklerin cinsinden ifade edilebilir:
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 = ...
}
Nasılgeçerli:
Bu kurulumu hakkında birkaç soru var 0, İngilizce 'de bildirilmiştir?
G
veGame
'un bu durumda oynadığı rollerin adları nelerdir? (Bu "özyinelemeli" ilişkide özellikle anlamlıdır.)Bu "aile polimorfizminin" makul bir uygulaması mı? Üst düzeyde, benim anlayışım bunun Oyun ve OYUNCU ve DEVLET'in bir "aile" olarak değişmesi gerektiği anlamına geliyor. 2009 (
Scala Bakış (2006) http://www.scala-lang.org/docu/files/ScalaOverview.pdf
Martin Kneissl günlüğü: Ben başka bir yerde gördüğüm ölçüde farklılık ettik Scala aile polimorfizmi alır ve ben farklı tradeoffs net değilim) typeclasses, makroları f-sınırlanmış polimorfizm veya başka bir şey gibi aile polimorfizmi yaklaşımlar http://www.familie-kneissl.org/Members/martin/blog/family-polymorphism-in-scala
Tartışma açıktır.
Suereth'in "Derinlikteki Scala" listelemesinin 7.6'sında, benzer kısıtlamaları olan daha yüksek bir "FileLike" özelliği gösterilir. Bu listeleme, Typeclasses'ın daha iyi neler yapabileceğinin bir örneği olarak kullanılır. [Typeclass alternatifi değiştirdiği versiyondan çok daha sezgisel görünüyor, bu yüzden temel bir şeyi kaçırdığımı farz ediyorum.] –