如何在scala中获取所有函数参数

时间:2016-05-12 07:34:20

标签: scala reflection

是否可以获取所有函数参数并将其传递给另一个?

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

相反funB(arg1, arg2, arg3)我想写一些类似funB(parentFun.args)

的内容

有可能吗?也许我应该使用一些反思?

2 个答案:

答案 0 :(得分:4)

我假设如果你做了两次以上,你应该为可读性创建案例类,你可以做到

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

如果您想在arg1内使用arg2arg3funA名称, 你可以

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

答案 1 :(得分:0)

如果你的唯一目标是简洁,你真的应该远离反思。

如果你有一堆备用函数,都具有相同的签名,你可以将它们定义为如下函数:

Session::flush();

或者,如果你有一堆具有相同签名的函数,你可以将它隐藏在一个接口后面并使用好的多态性。