Ich bin neu in Scala und ich lernte etwas über Mustervergleiche in Sammlungen, um eine einfache Logik generisch zu schreiben, um das vorletzte Element zu finden. Hier ist mein erster Versuch:Das vorletzte Element in der Scala-Liste finden
@scala.concurrent.tailrec
def penultimate[A](elems: List[A]) = elems match {
case Nil => None
case first :: second :: Nil => Some(first)
case head :: tail => penultimate(tail)
}
Ist das gut genug? Ich habe von Tail-Rekursionen gelesen und meine Methode zu einem rekursiven Tail gemacht!
vermag jedoch nicht für den folgenden Fall und wo ich erwarte, dass einige (1):
penultimate[Int](List(1)) // This should give me Some(1)
Gibt es etwas besser, dass ich tun könnte? Ich kann die umgekehrte Methode aus der Scala-Sammlungsbibliothek verwenden und dies zu einem einzigen Liner machen, aber ich wollte mich davon fernhalten.
Gibt es einen besseren Ansatz?
Was Sie sagen, ist nicht korrekt. Erstens: Dein Code kompiliert nicht. Zweitens: Wenn Sie die vorletzten Übersetzungsfehler (Liste (1)) beheben, wird 'None' zurückgegeben. –
Sorry wegen der Verwirrung! Ich habe meinen Beitrag bearbeitet! –
Jetzt bin ich verwirrt. Warum würden Sie _expect_ 'Some (1)'? –