2014-11-24 7 views
7
def adder(a:Int,b:Int):Int = {a+b} 
def doubler(a:Int):Int = {a*2} 
def doubleAdd = doubler _ compose adder 

ich den Fehler: Typenkonflikt gefunden: (Int, Int) => Int erforderlich:? => IntScala, Composing Funktion mit zwei Werten

Dann, wenn ich einfach doubleAdd = Verdoppler (Addierer _) versuche, bekomme ich den gleichen Fehler außer Int erforderlich statt? => Int

Gibt es eine Möglichkeit, eine Funktion mit zwei Parametern zusammenzusetzen? Tut mir leid, wenn das ziemlich einfach ist, ich bin ziemlich neu in der Sprache, und ich konnte nirgends ein Beispiel mit zwei Parametern finden.

Antwort

6

Sie versuchen, eine Function2 (Addierer) mit einer Funktion1 zu komponieren, daher das Problem. Eine Abhilfe ist Ihre Definition von Adder zu einer curried Version zu ändern:

def adder(a: Int)(b: Int):Int = a + b 

Dann doubleAdd teilweise Addierer wie dies gilt:

def doubleAdd(x: Int) = doubler _ compose adder(x) 

Was unter der Haube geschieht ist Addierer Umwandlung von einem Function2 (Int, Int) => Int, zu a oder eine Funktion, die eine Funktion zurückgibt. Sie können dann die vom Addierer zurückgegebene Funktion mit dem ersten bereits angewendeten Parameter zusammenstellen.

+0

Danke, das hat mir sehr geholfen – Jim

Verwandte Themen