在scala中,在运行时将可遍历对象转换为另一个
我希望能够遍历A的所有B。我尝试了以下代码:在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 _ => }
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 }