0

先日、リストからミキシング動作を除外するコードを書きました。

彼女は、私が遭遇した問題を説明するサンプルコードです。

def myFilter[A](toFilter : Any) : Option[A] = toFilter match {
  case keep : A => Some(keep)
  case _ => None
}

// what happens
myFilter[Int]("hallo") // => Option[Int] = Some(hallo)

// what I expect
myFilter[Int]("hallo") // => Option[Int] = None
myFilter[Int](1) // => Option[Int] = Some(1)

たぶん私は何か完全に間違ったことをしているのかもしれませんが、それは私の側で多くの問題を引き起こしました.今、私はこの機能によって読みやすくすることを望んでいた多くのコードを作成する必要があります.

4

2 に答える 2

1

を提供するだけClassTagです:

scala> import scala.reflect.ClassTag
import scala.reflect.ClassTag

scala>   def myFilter[A: ClassTag](toFilter : Any) : Option[A] = toFilter match {
     |     case keep : A => Some(keep)
     |     case _ => None
     |   }
myFilter: [A](toFilter: Any)(implicit evidence$1: scala.reflect.ClassTag[A])Option[A]

scala> myFilter[Int]("hallo")
res2: Option[Int] = None

scala> myFilter[String]("hallo")
res3: Option[String] = Some(hallo)
于 2016-04-04T15:15:20.463 に答える