1
我想構建一個模式,用戶可以實現一個簡單的接口,它接受一種類型的對象並返回另一種類型,然後也有一些類型的鏈對象,它由一個序列這些轉換。斯卡拉類型安全可組裝的生成器鏈與仿製藥
我遇到的問題是在Scala中獲得正確的泛型類型 - 我的Scala-foo還沒有那麼高,所以任何建議都是最受讚賞的,包括告訴我我正在做這個錯誤的/非scala的方式!
trait Builder[INPUT, OUTPUT] {
var input: Class[INPUT]
var output: Class[OUTPUT]
def process(input: RDD[INPUT]): RDD[OUTPUT]
}
class ComposableBuilder[INPUT, OUTPUT](input: Class[INPUT], output: Class[OUTPUT], phases: Seq[Phase[Any, Any]]) {
def appendBuilder[U](phase: Phase[OUTPUT, U]): ComposableBuilder[INPUT, U] = {
new ComposableBuilder[INPUT, U](input.class, phase.output.class, phases :+ phase)
}
}
這樣一個例子用法是:
ComposableBuilder(Seq(
ModelEnricher(),
CollateRecordsByKey(),
RecordBuilder(),
)).execute(input)
所以很明顯有一個隱含的約束,對於建設者在該序列的任何連續對builder[0].output == builder[1].input
同意,但值得注意的是,你的'Builder'對象其實只是類型的函數'A => B'。並且可以使用'compose'方法來組合函數,就像'ComposeBuilder'一樣。 –