我希望能够浏览A遍历的所有B.我尝试了以下代码:
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。如何实现?
答案 0 :(得分:5)
编译器认为返回类型是单位,因为如果你去而不是B 的情况下你什么也没有返回。
使用collect,更容易阅读:
def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b }