Преобразование traversable к другому во время выполнения в Scala

Я хотел бы быть в состоянии пройти через все B из traversable of A. Я попробовал следующий код:

object Test {
  class A
  class B extends A
  class C extends A
  var someAs: Traversable[A] = ...
  def theBofSomeAs: Traversable[B] = for(a <- someAs) {
    a match {
      case b:B => yield b
      case _ =>
    }
  }
}

но это не компилируется, потому что оно говорит, что выражение имеет тип Unit. Как этого добиться?

1 ответ

Решение

Компилятор считает, что возвращаемый тип - это Unit, потому что если вы переходите не в B, вы ничего не возвращаете.

Используйте сбор, который легче читать:

def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b }
Другие вопросы по тегам