1

A の traversable のすべての 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 であることが示されているため、これはコンパイルされません。それを達成する方法は?

4

1 に答える 1

5

コンパイラは、戻り値の型が Unit であると見なします。Bケースではない場合は何も返さないためです。

読みやすい collect を使用します。

def theBofSomeAs: Traversable[B] = someAs.collect { case b: B => b }
于 2013-05-14T13:17:12.940 に答える