2016-03-27 5 views
0
coverting

Parameter habe ich ein paar Funktionen mit den gleichen Code-Partnern wie die folgendeneine Funktion mit Funktionen wie

def updateFoo(fooId: Long, user: String): Option[Foo] = { 

    val fooMaybe = fooDao.getById(fooId) 
    fooMaybe match { 
    case Some(foo) => 
     fooDao.update(
     foo.copy(updatedBy = Some(user), validationStatus = Some(ValidationStatus.Valid)) 
    ) 
    case None => 
     throw new Exception(s"Foo with ID: '$fooId' doesn't exist") 
    } 
} 

wo Foo einen Fall Klasse.

duplizierten Code zu reduzieren, schreibe ich die folgende Funktion von anderen Funktionen gemeinsam genutzt werden Ziel

private def doIt(f1: Long => Option[Object], parameter1: Long, f2: Object => Option[Object], paramter2: String): Option[Object] ={ 

val somethingMaybe = f1(parameter1) 
somethingMaybe match { 
    case Some(something) => 
    f2(
     something.copy(updatedBy = Some(paramter2), 
     validationStatus = Some(ValidationStatus.Valid)) // <-- can't be complied 
    ) 
    case None => 
    throw new DomainException(s"Object with ID: '$parameter1' doesn't exist") 
} 
} 

Ist es richtig?

Antwort

0

Sie angegeben f2 Funktion nur einen Parameter akzeptieren:

f2: Object => Option[Object] 

aber Sie diese Funktion mit zwei Parametern aufrufen:

f2(
    something.copy(updatedBy = Some(paramter2), 
    validationStatus = Some(ValidationStatus.Valid) // <-- can't be complied 
) 

Vielleicht möchten Sie Sie f2 Aussage ändern wie:

f2: (Object, Option[ValidationStatus]) => Option[Object] 
+0

Ich verpasste eine enge Klammer dort. Ich habe eine Korrektur. – TeeKai

Verwandte Themen