Mustervergleich in einer Liste in Scala

8

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.

    
Soumya Simanta 24.10.2012, 21:01
quelle

2 Antworten

22

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:

%Vor%

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:

%Vor%     
Russell 24.10.2012, 21:04
quelle
-1

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.

    
Manoj Shah 31.07.2016 17:17
quelle

Tags und Links