【发布时间】:2017-12-15 17:17:49
【问题描述】:
我有一个类似的问题(In Scala, is it possible to “curry” type parameters of a def?) ,但我不知道如何使用给定的解决方案解决它。
如下所示,我目前的实现不允许类型参数的推断(需要提供泛型类型U)。
trait Block[U] {
def map(df: DataFrame, params: U): DataFrame
}
case class ParseURL() extends Block[(String, Column)] {
override def map(df: DataFrame, params: (String, Column)): DataFrame
}
class Pipeline(df: Dataframe) {
...
def copy(newDf: DataFrame) = new Pipeline(newDf)
...
def map[T <: Block[U] : ClassTag, U](d: U): Pipeline = {
val block: T = implicitly[ClassTag[T]].runtimeClass.newInstance.asInstanceOf[T]
this.copy(block.map(df, d))
}
...
}
这是我目前对该实现的使用:
val pipeline = new Pipeline(df).map[ParseURL, (String, Column)]("url", $"url")
但是我想用map方法比如:
val pipeline = new Pipeline(df).map[ParseURL]("url", $"url")
我认为匿名课程可能是可能的,但我们将不胜感激:)
编辑:另外,我不知道this article 是否应该激励我。
【问题讨论】:
标签: scala