Domanda

Sto imparando Scala e sto cercando di memorizzare una funzione in una var per valutarla in seguito:

var action:() => Any = () => {}
def setAction(act: => Any) {
    action = act 
}

ma ciò non viene compilato:

  

errore: tipo non corrispondente;
  trovato: Qualsiasi
  richiesto: () = > qualsiasi
  action = act

Quindi mi sembra che in action = act invece di assegnare la funzione, la sta valutando e assegnando il risultato.
Non riesco a scoprire come assegnare la funzione senza valutarla.

Grazie!

È stato utile?

Soluzione

Tipo di nota " () = > Qualsiasi " non è lo stesso del parametro per nome " = > Qualsiasi " ;. Digita " () = > Qualsiasi " è una funzione che non accetta alcun parametro e restituisce Any, mentre il parametro per nome " = > Qualsiasi " ritarda l'esecuzione del parametro fino a quando non viene utilizzato e restituisce Any.

Quindi quello che devi fare qui è il seguente:

var action: () => Any = null

def setAction(act: => Any) = action = () => act

setAction(println("hello")) // does not print anything

action() // prints "hello"

setAction(123)

action() // returns 123

Altri suggerimenti

Penso che la tua dichiarazione dei parametri sia sbagliata. Questo è probabilmente quello che vuoi se vuoi semplicemente memorizzare una funzione in una var per un uso successivo:

def setAction(act:() => Any) {
    action = act 
}

e quindi:

scala> def p() { println("hi!") }
p: ()Unit

scala> setAction(p)

scala> action()
hi!
res2: Any = ()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top