我希望将一系列函数应用于一个对象(每个函数可以返回相同或修改的对象),并获得最后一个函数返回的最终结果。
是否有一种惯用的Scala方式来转换它(伪代码):
pipeline
进入这个?
foreach
var
在运行时初始化,包含未确定数量的“manglers”。
我尝试使用foldLeft
,但需要中间ListMap
来存储结果,Something
仅适用于ConvertMagicObjectTo<T>
的类型,而初始值和结果属于obj
类型。
由于
答案 0 :(得分:5)
这应该这样做:
pipeline.foldLeft(initial_value){case (acc, (k,obj)) => obj.func(acc)}
不知道为什么管道包含对。
答案 1 :(得分:1)
假设输入和输出类型相同,我会使用reduceLeft
和andThen
组成:
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))