我的要求是从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])
由于
答案 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
。