Pattern matching auf eine Liste, in der Scala
Ich bin ein wenig verwirrt über pattern-matching auf eine Liste, in der Scala.
Zum Beispiel.
val simplelist: List[Char] = List('a', 'b', 'c', 'd')
//> simplelist : List[Char] = List(a, b, c, d)
def simple_fun(list: List[Char]) = list match {
case (x:Char) :: (y:List[Char]) => println(x)
case _ => Nil
}
//> simple_fun: (list: List[Char])Any
simple_fun(simplelist)
//> a
//| res0: Any = ()
Diese derzeit druckt nur eine Zeile der Ausgabe. Sollte es nicht laufen/Muster passen auf jedes element der Liste ?
EDIT: ich der compile-Fehler und kopiert die Ausgabe von REPL.
InformationsquelleAutor Soumya Simanta | 2012-10-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sei denn, Sie sind immer wieder ruft
simple_fun
in gewisser Weise, das was du da hast wird das Muster mit dem ersten element und nichts mehr. Um es entsprechend die ganze Liste, Sie können Holen Siesimple_fun
zu sich selbst rekursiv aufruft, so aus:Hinweis habe ich auch ließen einige der Arten, wie der Scala-compiler kann daraus schließen Sie, verlassen Sie mit weniger überladen, mehr lesbaren code.
Als kleine Randbemerkung, ruft
println
wiederholt innerhalb der Funktion ist nicht besonders funktional - wie es ist alles über die Nebenwirkungen. Eine weitere idiomatischen Ansatz wäre, die Funktion haben, erstellen Sie eine Zeichenfolge Beschreibung die Liste, die dann eine Ausgabe mit einem einzelnen Aufruf vonprintln
- also die Nebenwirkungen halten sich in einer einzigen, gut definierten Platz. So etwas wie dieses wäre ein Ansatz:x match { case ... }
bedeutet, dass Sie versuchen, zu bewerten, wiex
gemacht wird und dann etwas tun, basierend auf, dass. Wenn Sie es auf einex: List[T]
diematch
werden versuchen, herauszufinden, was ist diecase
dass "identifiziertx
besten" und zu bewerten, was nach der entsprechenden=>
. Es hat nichts zu tun mit Durchlaufen der Liste.Ich denke, Folgendes sollte funktionieren:
Die erste Zeile ist ein Spiel für Null, so dass, wenn wir etwas nicht finden nichts zurück.
Die zweite Zeile identifizieren, die Liste der Listen und erinnern an die Methode flatten und glätten Sie die Liste der Listen.
Ich möchte auch erwähnen, dass der Fall für Listen aufgeteilt werden können und nicht nur Kopf und Schwanz, sowie alle N Anzahl der Listenelemente:
Hoffe, es wird nützlich sein, um jemanden.