2013-05-14 1 views
1

Я хотел бы быть в состоянии пройти через все БС в проходимой А. Я попытался следующий код:Преобразование проходимой к другому во время выполнения в Скале

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. Как это сделать?

ответ

5

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

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

def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b } 
Смежные вопросы