2016-05-12 91 views
0

是否有可能獲取所有函數參數並將其傳遞給另一個?如何在scala中獲取所有函數參數

def function funA(arg1: String, arg2: String, arg3: Int): Any = { 
    .... 
    funB(arg1, arg2, arg3) 
} 

相反funB(arg1, arg2, arg3)我想寫這樣的事情funB(parentFun.args)

是它在所有可能的?也許我應該使用一些思考?

回答

4

我認爲,如果你做的次數不要超過兩次,你應該儘管創建可讀性案例類,你可以做

def funA(arg:(String,String,Int)): Any = { 
    (funB _).tupled(arg) 
} 
//and call it 
funA("a","b",1) 

,如果你wnat使用arg1arg2arg3funA內, 你可以

def funA(arg:(String,String,Int)): Any = { 
    val (arg1,arg2,arg3) = arg 
    println(arg1) //arg1 is arg._1 
    (funB _).tupled(arg) 
} 
0

如果你唯一的目標是簡潔,你真的應該遠離反思。

如果你有一大堆的複用功能,都具有相同的簽名,你可以將它們定義爲功能如下:

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多態性。

相關問題