我有一个多态函数,可以将列表转换为集合:
import shapeless.PolyDefns.~>
import shapeless._
val lists = List(1,2) :: List("A", "B") :: List(1.1, 2.2) :: HNil
object sss extends (List ~> Set) {
def apply[T](l:List[T]):Set[T] = {
l.toSet
}
}
lists.map(sss) // I want: Set(1,2) :: Set("A", "B") :: Set(1.1, 2.2) :: HNil
如果我想改变这个函数的行为,现在我想添加一个额外的参数来指定应将输入列表中的哪个项目放入集合中。下面是错误的语法 - 你能告诉我正确的做法吗?
object sss extends (List ~> Set) { // Compiler says no!
def apply[T](i:Int)(l:List[T]):Set[T] = {
l.slice(i,i+1).toSet
}
}
我认为这个失败是因为额外的参数使它不再符合List ~> Set的签名,那么我该怎么解决呢?
// 我想要:1 ::“A”:: 3.5 :: HNil
- pedrofurla