Vorrei passare una chiusura a un metodo come opzione e sto facendo ciò che viene mostrato di seguito. Ottengo un errore di compilazione come mostrato di seguito. È possibile passare un parametro di chiusura opzionale a una funzione?Come passare un parametro di chiusura opzionale a una funzione?
def sampleMethod(a: String, b: String, optionalMethod: Option[(String, Int) => Unit]) {
// do some processing with a and b
optionalMethod match {
case Some(optionalMethod) => {
optionalMethod("a",3)
}
case _
log("no optional method passed")
}
}
// definition of optMethod in some other place
val optMethod = (c: String, d: Int) => {
// some processing with c, d and external values
}
// invoke
sampleMethod("hi", "bye", optMethod) => FAILS TO COMPILE
ERROR = type mismatch. expecting Option[(String, Int) => Unit] found (String, Int) => Unit
sampleMethod ("ciao", "ciao", alcuni (optMethod)) – twillouer
facoltativoMethod.map (f => f ("a", 3)) per essere più chiaro – twillouer
Solo perché altri linguaggi e le loro comunità di utenti sono sciatti con termino logy, non facciamo lo stesso qui. "Chiusura" si riferisce all'uso di variabili libere in una funzione letterale (nomi senza legami nel corpo di quella funzione) e tali riferimenti "si chiudono" nell'ambiente lessicale. Non tutte le funzioni implicano la chiusura nell'ambiente lessicale. Non tutte le funzioni sono letterali di funzione. Ad esempio, vengono spesso creati (automaticamente e in modo trasparente dal compilatore o esplicitamente) tramite "applicazione parziale" di un'altra funzione o di un metodo. –