我有一組模型和一組可以在模型上運行的算法。並非所有類型的模型都可以執行所有算法。我希望模型類能夠聲明他們可以執行的算法。模型可以執行的算法可能取決於其參數。scala:mixins取決於參數的類型
示例:假設我有兩種算法,MCMC以及重要性,表示爲性狀:
trait MCMC extends Model {
def propose...
}
trait Importance extends Model {
def forward...
}
我有一個模型類普通,這需要的平均參數,它本身就是一個模型。現在,如果意思是實現MCMC,我希望Normal能夠實現MCMC,如果mean意味着實現了重要性,我希望Normal能夠實現重要性。
我可以這樣寫: 分類標準(平均模式)擴展模式{// 一些常用的東西放在這裏 }
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
}
我可以創建工廠方法確保正確的那種普通的獲取用給定的意思創造。但顯而易見的問題是,如果意味着實現MCMC和重要性呢?然後我希望Normal也能實現它們。但我不想創建一個重新實現並提出的新類。如果NormalMCMC和NormalImportance不需要參數,我可以使它們成爲特徵並將它們混合在一起。但是在這裏,我想要根據參數的類型進行混合。有沒有一個好的解決方案?