Komplette Anfänger zu Scala und versuchen gerade jetzt, die Grundlagen herauszufinden.Scala Type Mismatch Unit anstelle von Int
Als Teil eines Tutorials versuche ich eine Funktion zu erstellen, die das größte Element in einer Liste von ganzen Zahlen zurückgibt. Um dies zu erreichen Ich habe zusammen (vorläufig) einen den folgenden Code:
def max(xs: List[Int]): Int =
if (xs.isEmpty)
throw new java.util.NoSuchElementException
else
findMax(xs.head, xs.tail)
def findMax(a: Int, b: List[Int]) {
if (b.isEmpty) return a
if (a > b.head)
findMax(a, b.tail)
else
findMax(b.head, b.tail)
}
Allerdings, wenn ich versuche, es zu kompilieren ich eine Art Fehlermeldung erhalten für Zeile 5.
[error] /scala/example/src/main/scala/example/Lists.scala:5: type mismatch;
[error] found : Unit
[error] required: Int
[error] findMax(xs.head, xs.tail)
Ich muss Ich bin ein wenig verwirrt wegen dieser Fehlermeldung, da ich nicht verstehe, wie der Compiler denkt, dass ich versuche, einen Einheitentyp zu übergeben, vorausgesetzt, die Logik stellt sicher, dass eine Liste vor dieser Zeile nicht leer ist.
Kann jemand helfen, das Problem hier zu klären?
Prozedur Syntax unter -Xfuture ist veraltet. Ich denke, das ist der Grund. –
Danke, du hast noch mehr Dinge geklärt, als mir klar wurde, dass sie mich verwirrten!Wenn ich eine weitere Frage stellen kann, können Sie erklären, was zurückgegeben wird, wenn eine Ausnahme ausgelöst wird? Konkret wollte ich ursprünglich die Zeilen 2 und 3 als Teil einer Wächterklausel anstelle einer if-else-Bedingung zusammenfügen, aber dies führt zu einer anderen Instanz des Typs Mismatch (Unit statt Int) und der Compiler sagt dann "xs" kein Wert, wenn er im Aufruf der findMax-Funktion verwendet wird. –
'Würfe' ist ein ganz besonderer Fall. Es kommt nicht zurück. Es gibt auch keine Versuche, die den Typ der ausgelösten Ausnahme nicht abfangen. In diesem Fall ist der Rückgabetyp von "throws" oder "try" ein spezieller Bottom-Typ namens "Nothing". Es gibt keine Fälle von 'Nothing' - nicht einmal' null' ist 'Nothing'. 'Nothing' ist ein Subtyp von allem, so dass ein' if', das 'Nothing' in einem Zweig und ein' Int' in dem anderen zurückgibt, letztendlich 'Int' zurückgibt, da dies der niedrigste gemeinsame Typ seiner zwei Zweige ist. – Zeimyth