我有點困惑,需要一隻手握住。我可以有一個要執行的函數列表,其中函數採用不同的參數嗎?
如何獲取要運行的函數列表,其中每個函數都可能使用不同的參數集?
例如
def run1(a: Int)...
def run2(b:Int, c: Int) ...
def run3(x: Boolean) ...
然後將所有這些函數放入一個List中,然後我可以遍歷並執行它們。
我必須以某種方式描述每個函數的基本接口,然後我可以調用例如運行 ?
我有點困惑,需要一隻手握住。我可以有一個要執行的函數列表,其中函數採用不同的參數嗎?
如何獲取要運行的函數列表,其中每個函數都可能使用不同的參數集?
例如
def run1(a: Int)...
def run2(b:Int, c: Int) ...
def run3(x: Boolean) ...
然後將所有這些函數放入一個List中,然後我可以遍歷並執行它們。
我必須以某種方式描述每個函數的基本接口,然後我可以調用例如運行 ?
這裏有一種方法來也許解決您的問題:
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
有另一種選擇,而不是模式匹配功能。您可以將決策責任轉移到列表創建階段。
這個想法是爲統一所有功能的參數創建一個通用接口。
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))
所以這是一個使用相同參數運行多個函數的例子嗎? –
對,這是一個想法 - 適應功能相同的參數 –
我得到一個錯誤'''scala> val函數:List [Parameters =>()] = List(p => run1(pa))
可以重載一個函數,而他們有不同的參數。 – raven