Mik*_*yer 1 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 _ =>
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这不会编译,因为它表示表达式具有类型Unit.怎么实现呢?
编译器认为返回类型是Unit,因为如果你不去B,你就什么都不返回.
使用collect,更容易阅读:
def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b }
Run Code Online (Sandbox Code Playgroud)