Ich bin etwas verwirrt in Bezug auf den Mustervergleich auf einer Liste in Scala.
Zum Beispiel.
%Vor%Dies druckt momentan nur eine Ausgabezeile. Sollte es nicht auf jedem Element der Liste laufen / Muster übereinstimmen?
EDIT: Ich habe die Kompilierfehler behoben und die Ausgabe von der REPL kopiert.
Es sei denn, Sie rufen simple_fun
auf irgendeine Weise wiederholt an. Das, was Sie dort haben, stimmt mit dem ersten Element und nicht mehr überein. Um es mit der gesamten Liste abzugleichen, können Sie simple_fun
dazu veranlassen, sich rekursiv zu nennen, wie folgt:
Hinweis Ich habe auch einige der Typen weggelassen, da der Scala-Compiler auf sie schließen kann, so dass Sie weniger überladenen, besser lesbaren Code haben.
Als kleine Randnotiz ist das wiederholte Aufrufen von println
innerhalb der Funktion nicht besonders funktional - da es sich um Nebenwirkungen handelt. Ein idiomatischerer Ansatz bestünde darin, dass die Funktion einen String konstruiert, der die Liste beschreibt, die dann mit einem einzigen Aufruf an println
ausgegeben wird, so dass die Nebenwirkungen an einem einzigen klar definierten Ort bleiben. So etwas wäre ein Ansatz:
Ich denke, das sollte funktionieren:
%Vor%Die erste Zeile ist eine Übereinstimmung für Nil, also wenn wir nichts finden, gib nichts zurück. Die zweite Zeile identifiziert die Liste der Listen und ruft die Flattenmethode auf und glättet die Liste der Listen.
Tags und Links scala list pattern-matching