List的Unzip方法中的Scala错误

时间:2017-05-26 19:45:20

标签: scala

我有一个元组列表。元组的每个元素都是MyClass类型:

case class MyClass(metrics: List[MyOtherClass], tags: Set[String])

我想调用unzip方法来获取列表元组。我收到以下错误消息:Error

我知道方法定义是:def unzip[A1, A2](implicit asPair: (A) ⇒ (A1, A2)): (List[A1], List[A2])

但是当我在List [(Int,Int)]上调用I unzip方法时,编译器不会要求我包含asPair参数。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

我缺乏足够的回复评论,但是如果您可以发布一些代码,但这些代码不起作用,那将非常有用。

我已经整理了一个简单的示例,解压缩按预期工作。

object Test {
  case class MyClass(metrics: List[MyOtherClass], tags: Set[String])
  case class MyOtherClass(thing: Int)

  def main(args: Array[String]): Unit = {
    val a = List.fill(2)(
      (
        MyClass(List(MyOtherClass(1)), Set("foo")),
        MyClass(List(MyOtherClass(2)), Set("bar"))
      )
    )
    println(a.unzip)
  }
}

哪个输出

(List(MyClass(List(MyOtherClass(1)),Set(foo)), MyClass(List(MyOtherClass(1)),Set(foo))),List(MyClass(List(MyOtherClass(2)),Set(bar)), MyClass(List(MyOtherClass(2)),Set(bar))))

答案 1 :(得分:0)

  

编译器不要求我包含asPair参数

那是因为它是implicit。请阅读Scala中的隐式参数。

  

我有一个元组列表。元组的每个元素都是MyClass

类型

错误消息告诉您实际拥有的是List[Product with Serializable]。最常见的原因是它是一个不相关的案例类/对象列表;基于引用的句子,它可能是具有不同数量元素的元组,但您也可能意外地具有例如那里有一个Someunzip仅适用于对列表,而不是任意元组。