Dlaczego obróbka wzorcowa Scala nie działa w pętlach do dopasowywania typu?

Koduję przeciwko API, które daje mi dostęp do zdalnego systemu plików. Interfejs API zwraca listę plików i katalogów jako listę obiektów węzłów (rodzic do pliku i katalogu).

Chcę pracować tylko na katalogach, ignorując pliki. Próbowałem użyć dopasowania wzorca typu wfor pętla, ale nie działa:

for {
    dir: CSDir <- workarea.getChildren() // <-- I'm getting an error here complaining about type conversion
} {
    println(dir)
}

Podobny przykład używa podstawowych obiektów scala do uruchomienia bez zależności:

val listOfBaseObjects:List[Any] = List[Any]("a string", 1:Integer);

for (x: String <- listOfObjects) {
  println(x)
}

Używam regularnego dopasowywania wzorca po stronie pętli for i to działa dobrze:

// This works fien
for (child <- workarea.getChildren()) {
  child match {
    case dir: CSDir => println(dir)
    case _ => println("do not nothing")
  }
}
Pytanie:

Czy możesz mi powiedzieć, dlaczego pierwszy / drugi przykład nie działa w scala 1.9?

W „Programowaniu w Scali”for pętla jest reklamowana, aby używać tego samego wzoru pasującego comatch więc powinno działać.

Jeśli for i match są różne, byłoby wspaniale, gdybyś mógł wskazać mi kilka artykułów z większą ilością szczegółów. Co z dopasowywaniem wzorów w przypisaniu?

Aktualizacja:

Nie mogę zaakceptować odpowiedzi, która stwierdza, że ​​nie można pominąć elementów w pętli for, ponieważ jest to sprzeczne z „Prog. In scala”. Oto fragment z sekcji 23.1:

pat <- expr ... Wzórpat zostaje dopasowany jeden po drugim do wszystkich elementów tej listy. ... jeśli mecz się nie powiedzie, nie jest generowany żaden błąd MatchError. Zamiast tego element jest po prostu odrzucany z iteracji

i rzeczywiście poniższy przykład działa dobrze:

scala> val list = List( (1,2), 1, 3, (3,4))
scala> for ((x,y) <- list) { println (x +","+ y) }
1,2
3,4

Dlaczego więc dopasowanie typu nie działa?

questionAnswers(3)

yourAnswerToTheQuestion