Преобразование 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 }