是否有可能獲取所有函數參數並將其傳遞給另一個?如何在scala中獲取所有函數參數
def function funA(arg1: String, arg2: String, arg3: Int): Any = {
....
funB(arg1, arg2, arg3)
}
相反funB(arg1, arg2, arg3)
我想寫這樣的事情funB(parentFun.args)
是它在所有可能的?也許我應該使用一些思考?
是否有可能獲取所有函數參數並將其傳遞給另一個?如何在scala中獲取所有函數參數
def function funA(arg1: String, arg2: String, arg3: Int): Any = {
....
funB(arg1, arg2, arg3)
}
相反funB(arg1, arg2, arg3)
我想寫這樣的事情funB(parentFun.args)
是它在所有可能的?也許我應該使用一些思考?
我認爲,如果你做的次數不要超過兩次,你應該儘管創建可讀性案例類,你可以做
def funA(arg:(String,String,Int)): Any = {
(funB _).tupled(arg)
}
//and call it
funA("a","b",1)
,如果你wnat使用arg1
,arg2
,arg3
名funA
內, 你可以
def funA(arg:(String,String,Int)): Any = {
val (arg1,arg2,arg3) = arg
println(arg1) //arg1 is arg._1
(funB _).tupled(arg)
}
如果你唯一的目標是簡潔,你真的應該遠離反思。
如果你有一大堆的複用功能,都具有相同的簽名,你可以將它們定義爲功能如下:
val funB = (arg1: String, arg2: String, arg3: Int) => {
"Foo"
}
val funC = (arg1: String, arg2: String, arg3: Int) => {
"Bar"
}
def funA(somethingToDecideWhichFunctionToCall: String): (String, String, Int) => String = {
somethingToDecideWhichFunctionToCall match {
case "Option 1" => funB
case "Option 2" => funC
}
}
def callingThing() = {
val arg1 = "Foo"
val arg2 = "Bar"
val arg3 = 1
funA("Option 1")(arg1, arg2, arg3)
}
或者,如果你有一大堆的功能都具有相同的簽名,可以將其隱藏在界面後面並使用良好的ol多態性。