收集的類型在斯卡拉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