给定一个包含变量类型项的 Scala 集合,我可以按类型进行过滤。
trait X
case class Y(y:Int) extends X
case class Z(z:Int) extends X
val l = List(Y(1), Y(2), Z(3), Z(4))
l.collect{case e: Y=>e} // returns List[Y] = List(Y(1), Y(2))
l.collect{case e: Z=>e} // returns List[Z] = List(Z(3), Z(4))
我需要参数化过滤。
val f = Y
l.collect{case e: f=>e} // should return List[Y] = List(Y(1), Y(2))
最后一行返回error: not found: type f
。case
该语法中不允许对 Scala 类型进行参数化。
是否有 Scala 式的方法来参数化此过滤操作?(也许使用函数以外的东西collect
。)是否需要反射?