在scala中,在运行时将可遍历对象转换为另一个

在scala中,在运行时将可遍历对象转换为另一个,scala,yield-keyword,Scala,Yield Keyword,我希望能够遍历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 _ => }

我希望能够遍历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 _ =>
    }
  }
}
对象测试{
甲级
B类扩展了A类
C类扩展了
var someAs:可遍历[A]=。。。
def theBofSomeAs:Traversable[B]=for(a)收益率B
案例=>
}
}
}

但这并没有编译,因为它说表达式有Unit类型。如何实现这一点?

编译器认为返回类型是Unit,因为如果您转到not B case,您将什么也不返回

使用更易于阅读的collect:

def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b }

编译器认为返回类型是Unit,因为若您选择not B case,则什么也不返回

使用更易于阅读的collect:

def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b }