2016-09-22 1 views
0

Meine Anforderung ist es, eine Funktion aus einer anderen Funktion in scala, die Variable Argument, das heißt, während der Ausführung der zurückgegebenen Funktion übergeben, kann ich mehrere Argumente zur Laufzeit übergeben.Scala: Rückgabe einer Funktion mit variablem Argument von einer anderen Funktion

Mein Code sieht so aus:

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

In Code, ich möchte eine Funktion zurück, die nehmen, Map [String, String] als ein Argument, während die andere Map [String, Alles] sollte fakultativ sein zu ihm.

Aber ich Kompilierungsfehler in return-Anweisung wie folgt erhalten:

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

Kann mir jemand helfen, was ich hier verpasst haben? Hinweis: Meine Forderung ist, dass zurück Funktion (Map[String,String]) ein Argument entweder nehmen oder es kann zwei Argumente max (Map[String,String], Map[String,Any])

Dank

Antwort

3

Es ist unmöglich, nimmt varargs in anonymer Funktion zu verwenden. Sie können Ihr Stück Code erhalten arbeiten durch die zurückgegebene Funktion zu machen, anstatt anonym wie folgt verschachtelt:

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

Da jedoch mehrere Instanzen von Map[String, Any] brauchen nicht aber entweder keine oder eine, würden Sie besser dran mit , None vorausgesetzt, wenn es nicht benötigt wird.

Verwandte Themen