将一系列函数应用于值并获得最终结果

时间:2015-09-30 17:47:04

标签: scala

我希望将一系列函数应用于一个对象(每个函数可以返回相同或修改的对象),并获得最后一个函数返回的最终结果。

是否有一种惯用的Scala方式来转换它(伪代码):

pipeline

进入这个?

foreach

var在运行时初始化,包含未确定数量的“manglers”。

我尝试使用foldLeft,但需要中间ListMap来存储结果,Something仅适用于ConvertMagicObjectTo<T>的类型,而初始值和结果属于obj类型。

由于

4 个答案:

答案 0 :(得分:5)

这应该这样做:

 pipeline.foldLeft(initial_value){case (acc, (k,obj)) => obj.func(acc)}

不知道为什么管道包含对。

答案 1 :(得分:1)

假设输入和输出类型相同,我会使用reduceLeftandThen组成:

def pipe[A](a: A, funcs: List[A => A]): A = funcs.reduceLeft(_ andThen _)(a)

答案 2 :(得分:0)

我认为foldLeft是正确的选择:

val pipeline = List("a"-> func1, "b"-> func2, "c"-> func3)
...
val result = pipeline.foldLeft(initial_value) {case (acc,(key,func)) => func(acc)}

答案 3 :(得分:0)

首先摆脱你的钥匙:

pipeline.values.foldLeft(initial_value)((a, f) => f.func(a))