我有一个元组列表。元组的每个元素都是MyClass类型:
case class MyClass(metrics: List[MyOtherClass], tags: Set[String])
我知道方法定义是:def unzip[A1, A2](implicit asPair: (A) ⇒ (A1, A2)): (List[A1], List[A2])
但是当我在List [(Int,Int)]上调用I unzip方法时,编译器不会要求我包含asPair参数。
我在这里缺少什么?
答案 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]
。最常见的原因是它是一个不相关的案例类/对象列表;基于引用的句子,它可能是具有不同数量元素的元组,但您也可能意外地具有例如那里有一个Some
。 unzip
仅适用于对列表,而不是任意元组。