Scala:动态调用函数

时间:2017-08-24 22:12:36

标签: scala

我对scala很新。

我正在使用rscala与R函数集成。 例如,我使用以下方法调用R函数并检索String值。

方法签名:

  

def invokeS0(function:Reference,args:Any *):String

方法实施

val v= rc.invokeS0("doPred","lemmas"->"Communicate,Design,Java,","frequency"->"3,3,1")

我的问题

但是,rc.invokeS0可以调用任何函数,因此可以有任意数量的参数。

我正在考虑构建一个包装器方法,该方法将函数名称作为String,参数作为Map。也许是这样的:

private def invokeRStringFunction(functionName: String = "testFunction", args: Map[String,String]): Unit =
{
    /**Iterate through map to generate following code*/
    val v= rc.invokeS0(functionName,mapKey1->mapValue1,mapKey2->mapValue2 etc etc)
}

但是我不确定如何编写代码,因为参数的数量是动态的。坦白说,我不确定是否有可能,但我想我会检查,以防万一。

任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用Map[String, String]Seq[(String, String)]转换为args.toSeq,然后使用_* ascription将其作为一系列参数传递,而不只是一个。

def invokeRStringFunction(functionName: String, args: Map[String, String]): Unit
= rc.invokeS0(functionName, args.toSeq: _*)