首页 > 解决方案 > Scala 将函数序列作为参数类型传递

问题描述

为了流水线化各种数据转换函数,我想遍历一系列函数并将每个函数应用于初始输入。对于单个输入,它将是这样的:

def transformPipeline(f: MyType => MyType)(val: MyType): MyType = {...}

我怎样才能定义这个函数,而不是接受一个f: MyType => MyType它会接受类似的东西Seq(f: MyType => MyType)

例如

def transformPipeline(f: Seq[MyType => MyType])(val: MyType): MyType = {...}

标签: scalafunctional-programmingpipeline

解决方案


如果我正确理解您的问题,那么这可能就是您所追求的。

def transformPipeline(fs: Seq[MyType => MyType])(init: MyType): MyType =
  fs.foldLeft(init)((v, f) => f(v))

像这样测试:

type MyType = Int

transformPipeline(Seq(_+1,_*2,_/3))(17)  //res0: MyType = 12

推荐阅读