Tôi có một tập hợp các lớp mô hình và một bộ thuật toán có thể chạy trên các mô hình. Không phải tất cả các lớp mô hình đều có thể thực hiện tất cả các thuật toán. Tôi muốn các lớp mô hình có thể khai báo những thuật toán nào họ có thể thực hiện. Các thuật toán mà một mô hình có thể thực hiện có thể phụ thuộc vào các đối số của nó.scala: mixins tùy thuộc vào loại đối số
Ví dụ: Giả sử tôi có hai thuật toán, MCMC, và tầm quan trọng, thể hiện dưới dạng những đặc điểm:
trait MCMC extends Model {
def propose...
}
trait Importance extends Model {
def forward...
}
Tôi có một lớp mô hình bình thường, trong đó có một cuộc tranh luận có ý nghĩa, mà là chính nó một mô hình. Bây giờ, nếu có nghĩa là thực hiện MCMC, tôi muốn Normal để thực hiện MCMC, và nếu có nghĩa là thực hiện quan trọng, tôi muốn Normal để thực hiện tầm quan trọng.
tôi có thể viết: lớp bình thường (nghĩa là: Model) mở rộng mẫu {// một số công cụ phổ biến goes here }
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
}
tôi có thể tạo ra các phương pháp nhà máy đảm bảo đúng loại bình thường được được tạo với một giá trị nhất định. Nhưng câu hỏi rõ ràng là, điều gì sẽ xảy ra nếu trung bình thực hiện cả MCMC và Tầm quan trọng? Sau đó, tôi muốn bình thường để thực hiện cả hai người trong số họ quá. Nhưng tôi không muốn tạo ra một lớp học mới để tái hiện đề xuất và tiến lên. Nếu NormalMCMC và NormalImportance không đưa ra các đối số, tôi có thể tạo ra các đặc điểm đó và trộn chúng vào. Nhưng ở đây tôi muốn việc trộn vào phụ thuộc vào loại đối số. Có một giải pháp tốt?