Почему обработка шаблонов в scala не работает для циклов для сопоставления типов?

Я использую API, который дает мне доступ к удаленной файловой системе. API возвращает список файлов и каталогов в виде списка объектов узла (родительский для файла и каталога).

Я хочу работать только над каталогами, игнорируя файлы. Я пытался использовать сопоставление с шаблоном типа вfor цикл, но он не работает:

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

Вот аналогичный пример использования базовых объектов scala для запуска без зависимостей:

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

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

Я заканчиваю тем, что использую регулярное сопоставление с образцом в цикле for, и это прекрасно работает:

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

Можете ли вы сказать мне, почему первый / второй пример не работает в Scala 1.9?

В разделе «Программирование в Scala»for цикл объявляется для использования того же сопоставления с шаблономmatch так что должно работать.

Если бы for и match были разными, было бы здорово, если бы вы указали мне несколько статей с более подробной информацией. Как насчет сопоставления с образцом в назначении?

Update:

Я не могу принять ответ, в котором говорится, что невозможно пропустить элементы в цикле for, поскольку это противоречит «Prog. в скале. Вот фрагмент из раздела 23.1:

pat <- expr ... The pattern pat gets matched one-by-one against all elements of that list. ... if the match fails, no MatchError is thrown. Instead, the element is simply discarded from the iteration

и действительно, следующий пример работает просто отлично:

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

Почему тогда сопоставление типов не работает?

Ответы на вопрос(3)

Ваш ответ на вопрос