1
は型クラス、私は信じて、次のことを考える:私はその後、List[A]
を返し、入力queryFilterValues
にフィルタリングして、カレーList[A]
をフィルタリングするfilterFn
を定義し一般的なフィルタタイプクラスを作成しますか?
trait Element[A, B] {
val input: A
val filteredValue: Option[B]
}
、すなわちフィルタリングされているもの:
def filterFn[A, B](queryFilterValues: List[B])
(implicit ev: A => Element[A, B]): List[A] => List[A] =
elements => {
queryFilterValues match {
case _ :: _ => elements.flatMap { e =>
ev(e).filteredValue match {
case Some(v) => if(queryFilterValues.contains(v)) List(e.input) else Nil
case None => List.empty
}
}
case Nil => elements.map(_.input)
}
}
次に、Person => Element[Person, String]
のインスタンスと共にPerson
を作成しました。
最後に、私はそれを使用しようとしました:
// Filter on these names
val nameFilters = List("jane", "joe", "will")
val joe = Person(Some("joe"))
// Expect to get a `List(joe)` back since `joe#name` exists in the list.
scala> filterFn(nameFilters)(List[Person](joe))
しかし、私は、次のコンパイル時にエラーが発生します:
<console>:20: error: type mismatch;
found : List[Person]
required: ? => Element[?,String]
filterFn(nameFilters)(List[Person](joe))
を参照してください理由は、はいああです
Element[A, B]
から
A
から機能を期待しています。私の間違い - 感謝します。 –