我有点困惑,需要一点手握。
如何运行要运行的函数列表,其中每个函数可能采用不同的参数集?
e.g。
def run1(a: Int)...
def run2(b:Int, c: Int) ...
def run3(x: Boolean) ...
然后将所有这些函数放在List中,然后我可以遍历并执行它们。
我必须以某种方式描述每个函数的基本接口,以便我可以调用例如run()on?
答案 0 :(得分:4)
以下是可能解决问题的一种方法:
sealed trait Functions
case class Fun1(f: Int => Int) extends Functions
case class Fun2(f: (Int, Int) => Int) extends Functions
// first function adds 42 to input
// second function adds the two inputs
val xs: List[Functions] = List( Fun1( _ + 42 ), Fun2( _ + _ ) )
然后是一个如何折叠List[Functions]
。
此示例选择函数的任意输入,然后将它们一起添加。
scala> xs.foldLeft(0){ (acc, elem) => elem match {
| case Fun1(f) => f(42) + acc
| case Fun2(g) => g(10, 20) + acc
| }
| }
res1: Int = 114
答案 1 :(得分:0)
还有另一种选择,而不是模式匹配功能。您可以将决策责任转移到列表创建阶段。
我们的想法是为参数创建一个统一所有函数的公共接口。
case class Parameter(a: Int, b:Int, c:Int, d:Boolean ...)
val functions: List[Parameter => Unit] = List(
p => run1(p.a),
p => run2(p.b, p.c),
p => run3(p.d),
...)
稍后当数据准备就绪时,它可以在Parameter
对象中聚合并传输到函数
val param:Parameter = //aggregation of data
functions.foreach(f => f(param))