1
のようなものがオプションにどれをキャスト?同等の標準ライブラリはありますか?Scalaは[T]
のはなぜですかとどのように私は次のScalaコンパイラの警告解決します:
Warning:(7, 13) abstract type pattern T is unchecked since it is eliminated by erasure
case v: T => Some(v)
のようなものがオプションにどれをキャスト?同等の標準ライブラリはありますか?Scalaは[T]
のはなぜですかとどのように私は次のScalaコンパイラの警告解決します:
Warning:(7, 13) abstract type pattern T is unchecked since it is eliminated by erasure
case v: T => Some(v)
使用クラスタグを。タイプ情報は実行時に失われます。クラスタグを使用して行うことができるタイプ情報を提供する必要があります。
import scala.reflect.ClassTag
def cast[T: ClassTag](o: Any): Option[T] = o match {
case v: T => Some(v)
case _ => None
}
ScalaのREPL
scala> cast[String]("hello")
res2: Option[String] = Some(hello)
scala> cast[Int]("scala")
res3: Option[Int] = None
これで 'cast [List [String]](List [Int](1,2,3))'を試してみてください。 –
あなたは特別な方法は必要ありません: 'scala.util.Try(o.asInstanceOf [T])をtoOption' – Yawar
ことが最もある@Yawar厳密に標準ライブラリに依存していますが、フロー制御として例外を使用する必要があります。それは動作しますが、私はパムの解決策をとるでしょう。 – clay