Ich schreibe eine Funktion und habe ein seltsames Problem. Ich bin mit Pattern-Matching, und dann eine interne Funktion, die verwendet eine etwas verändert, aber fast identisches Muster und es kompiliert nicht:Verschachtelte Funktion Skews Rückgabetyp des übergeordneten Elements
def isTriangular(n: Int): Boolean = {
n match {
case n if n < 1 => false
case _ => triangularMaths(n, 1)
}
def triangularMaths(j:Int, counter: Int): Boolean = (j, counter) match {
case _ if j-counter == 0 => true
case _ if j-counter < 0 => false
case _ => triangularMaths(j-counter, counter+1)
}
}
Die Lösung für dieses ist ich ihn einfach an zwei separate Methoden machen, und sie arbeiten, solange triangularMaths
nicht verschachtelt ist. Da jedoch triangularMaths
nur für triangular
spezifisch ist, möchte ich, dass es verschachtelt wird. Allerdings, wenn ich das tue, beschwert sich mein Compiler und sagt mir, dass ich Unit
zurückgebe, anstatt die erwartete . Dies ist nicht ganz sinnvoll, da, sobald die ursprünglichen Groß- und Kleinschrei- bungen aufgelöst sind und "true" oder "false" zurückgegeben wird, sie bis zum Ende der Methode gehen soll. Was ist das Problem?
Hinweis: Der Rückgabewert einer Methode ist der Wert des letzten in der Methode ausgewerteten Ausdrucks. Tipp # 2: Was ist der letzte in der Methode ausgewertete Ausdruck? Tipp # 3: Was ist der Wert einer Funktionsdefinition? –