收集的类型在斯卡拉2.9.1通用斯卡拉
随着
def collectFirstOfT[T](la: List[_])(implicit m:Manifest[T]) : Option[T] = {
la.collect{case x if m.erasure.isAssignableFrom(x.getClass) => x}.
headOption.asInstanceOf[Option[T]]}
class A
class B
为什么这样表达:
val oB:Option[B] = collectFirstOf(List(new A,new B))
编译但收集一些(A),但
val oB =collectFirstOf[B](List(new A,new B))
工作正常。
如何从Option [T]推断T?
漂亮!我怎样才能防止功能被误用? (Idealy,它不应该编译) – jwinandy 2012-04-12 13:10:11
一个简单快捷的方法是添加一个显式参数,类:collectFirstOfT [T](cls:Class [T],la:List [_]),然后调用如下所示: collectFirstOfT(classOf [B],List(new A,new B))。这将按预期返回选项[B]。 – 2012-04-12 13:38:45