Ich habe eine Reihe von Klassen von Modellen und eine Reihe von Algorithmen, die auf den Modellen ausgeführt werden können. Nicht alle Klassen von Modellen können alle Algorithmen ausführen. Ich möchte, dass Modellklassen deklarieren können, welche Algorithmen sie ausführen können. Die Algorithmen, die ein Modell ausführen kann, können von seinen Argumenten abhängen.scala: mixins je nach Art der Argumente
Beispiel: Sagen wir, ich habe zwei Algorithmen, MCMC und Bedeutung, als Merkmale dargestellt:
trait MCMC extends Model {
def propose...
}
trait Importance extends Model {
def forward...
}
Ich habe eine Modellklasse Normal, die eine mittlere Argument, die selbst ist ein Modell. Nun, wenn der Durchschnitt MCMC implementiert, möchte ich, dass Normal MCMC implementiert, und wenn der Mittelwert Wichtigkeit implementiert, möchte ich, dass Normal die Wichtigkeit implementiert.
ich schreiben kann: Klasse Normale (Mittelwert: Model) erstreckt Modell { // einige gemeinsame Sachen geht hier }
class NormalMCMC(mean: MCMC) extends Normal(mean) with MCMC {
def propose...implementation goes here
}
class NormalImportance(mean: Importance) extends Normal(mean) with Importance {
def forward...implementation goes here
}
I Factory-Methoden erstellen können, die die richtige Art von normal stellen Sie sicher, bekommt mit einem bestimmten Mittel erstellt. Aber die offensichtliche Frage ist, was, wenn Mittelwert sowohl MCMC als auch Bedeutung implementiert? Dann möchte ich, dass Normal beide auch implementiert. Aber ich möchte keine neue Klasse erstellen, die Reimplements vorschlagen und weiterleiten. Wenn NormalMCMC und NormalImportance keine Argumente hätten, könnte ich sie zu Merkmalen machen und sie mischen. Aber hier möchte ich, dass die Mischung von der Art des Arguments abhängt. Gibt es eine gute Lösung?