应用Scala中列表中的所有函数

时间:2016-07-20 22:37:43

标签: scala

说,我有一个类MyFunc,它有一个方法def transform(rdd: RDD): RDD。这个课程来自图书馆,所以我无法改变它。

现在想象一下,我想在List[MyFun]变量上应用rdd。 我可以把它写成:

def applyAll(myFuncs: List[MyFunc], rdd: RDD): RDD = {
  var mutableRef = rdd
  for (myFunc <- myFuncs) {
    mutableRef = myFunc.transform(mutableRef)
  }
  mutableRef
}
斯卡拉的美丽来自简洁。因此,我正在寻找一种以简洁的方式按顺序应用所有MyFunc的方法。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,评论中建议最简单的方法是使用foldLeft。但是,您仍然可以使用递归功能轻松地编写它,而不会发生任何突变,

 def applyAll(myFuncs: List[MyFunc], rdd: RDD): RDD = {

  @tailrec
  def applyOne(myFuncs: List[MyFunc],newRDD: RDD): RDD = myFuncs match {
  case h::t => applyOne(t, h.transform(newRDD))
  case Nil => newRDD
  }
  applyOne(myFuncs,rdd)
 }

foldLeft很棒,你应该使用它,但它与你正在做的非常相似,即它循环遍历列表并改变变量。