Ich habe den folgenden Code in Scala-IDE:Scala - Leiten einer Funktion - eine Art Chaos
type myF =() => Boolean
def acceptFunction(f: myF) {
//...
}
und dann:
var a = false
def isA =() => a
aber wenn ich versuche, vorbei es, auf die acceptFunction, es führt zu Fehler:
acceptFunction(isA)
der Fehler ist:
type mismatch; found :() => Boolean required: Boolean
Aber warum?
Wenn ich isA
wie folgt erklären:
def isA() =() => a
dann ist es akzeptiert, aber ich nehme an, es ist erhalten ausgewertet wegen der Klammer.
Gibt es eine Möglichkeit, eine solche Funktion für eine weitere Auswertung zu übergeben?
UPDATE:
Sieht aus wie es etwas mit Scala-IDE ist. Die REPL hat keine Probleme mit diesen Ausdrücken. Jedoch kann ich es immer noch nicht schaffen, dass die übergebene Funktion nicht zu einem Abschluss wird. Ich meine, dass es in Schließung, und Ändern der var a
später und Aufruf des Beispiels mit println(f())
wieder - ändert sich nicht den Wert. Der zweite Teil der Frage bleibt also bestehen: Gibt es einen Weg, eine solche Funktion für eine weitere Bewertung zu übergeben?
Ich aktualisierte meine Antwort mit mehr Fragen als Antwort auf Ihr Update. –
Es funktioniert perfekt in Scala IDE. Ich habe deinen Code in ein 'Objekt' gehüllt. –
Es schlägt mit dem Fehler fehl, den du erwähnst, wenn ich die leere Klammer an der Aufrufstelle hinzufüge, wie zum Beispiel 'acceptFunction (isA())' - was natürlich richtig ist, da du beim Anwenden der Funktion einen Booleschen Wert erhältst '. –