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'一样。 –