Scala:从另一个函数返回带有变量参数的函数

时间:2016-09-22 14:08:03

标签: scala variadic-functions

我的要求是从scala中的另一个函数返回一个函数,该函数接受变量参数,即在执行返回的函数时,我可以在运行时传递多个参数。

我的代码如下:

object VarArgTest {
  def getFunction(): (Map[String, String],Map[String, Any]*) => Any={
    (arg:Map[String,String], arg2:Map[String,Any]*) => "random"//this gives compilation error
  }
}

在代码中,我想返回一个函数,它将Map [String,String]作为一个参数,而另一个Map [String,Any]应该是可选的。

但是我在return语句中得到了编译错误,如下所示:

type mismatch; found : (Map[String,String], Map[String,Any]) required: (Map[String,String], Map[String,Any]*) ⇒ Any

任何人都可以帮忙,我错过了什么? 注意:我的要求是返回的函数可以采用一个参数(Map[String,String]),也可以采用两个参数max (Map[String,String], Map[String,Any])

由于

1 个答案:

答案 0 :(得分:3)

在匿名函数中使用varargs是不可能的。 你可以通过使返回的函数嵌套而不是匿名来使你的代码工作:

object VarArgTest {
  def getFunction(): (Map[String, String],Map[String, Any]*) => Any = {
    def nestedFunction(arg:Map[String,String], arg2:Map[String,Any]*) = "random"
    nestedFunction
  }
}

但是,由于您不需要Map[String, Any]的多个实例,但无论是一个还是一个,您最好使用Option[Map[String, Any]],在不需要时提供None