2013-05-14 52 views
1

我希望能夠去通過A的穿越我嘗試下面的代碼的所有BS:在運行時轉換可穿越到另一個階

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 }