我对scala很陌生。
我正在使用 rscala 与 R 函数集成。 例如,我使用以下方法来调用 R 函数并检索字符串值。
方法签名:
def invokeS0(函数:引用,参数:任何*(:字符串
方法实现
val v= rc.invokeS0("doPred","lemmas"->"Communicate,Design,Java,","frequency"->"3,3,1")
我的问题
但是,rc.invokeS0 可以调用 ANY 函数,因此具有任意数量的参数。
我正在考虑构建一个包装器方法,该方法将函数名称作为字符串,将参数作为 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)
}
但是我不确定如何编写代码,因为参数的数量是动态的。坦率地说,我不确定这是否可能,但我想我会检查一下,以防万一。
任何提示将不胜感激。
将Map[String, String]
转换为带有args.toSeq
的Seq[(String, String)]
,然后使用_*
归因将其作为参数序列传递,而不仅仅是一个参数。
def invokeRStringFunction(functionName: String, args: Map[String, String]): Unit
= rc.invokeS0(functionName, args.toSeq: _*)