たとえば、特定の型 (例: )Iterable[A]
のすべての要素を絞り込みたい場合は、次のようにします。String
as filter { _.isInstanceOf[String] }
ただし、これを を介して実行できるとして使用することが明らかに望ましいです。Iterable[String]
map
as filter { _.isInstanceOf[String] } map { _.asInstanceOf[String] }
これはかなり醜いです。もちろん、flatMap
代わりに使用できます:
as flatMap[String] { a =>
if (a.isInstanceOf[String])
Some(a.asInstanceOf[String])
else
None
}
しかし、これがもっと読みやすいかどうかはわかりません! 変換narrow
を介して使用できる関数を作成しました。implicit
as.narrow(classOf[String])
しかし、私が見落としていたより良い組み込みメカニズムがあるかどうか疑問に思っていました. List[A]
特に、私の関数のように aを aList[String]
ではなく、 aに狭められるとよいでしょうIterable[String]
。