错误迭代序列中的对

时间:2012-11-23 13:28:02

标签: scala transpose

阅读this question后,我希望以下内容有效:

Seq( Seq(1,2,3) , Seq(4,5,6) ).transpose()

但是唉:

error: not enough arguments for method transpose: (implicit asTraversable: 
Seq[Int] => scala.collection.GenTraversableOnce[B])Seq[Seq[B]].
Unspecified value parameter asTraversable.
          Seq( Seq(1,2,3) , Seq(4,5,6) ).transpose()

此外,我似乎无法找到any reference to transpose on the scala docs,尽管Seq refers it

提供身份,它似乎以某种方式起作用:

scala> Seq( Seq(1,2,3) , Seq(4,5,6) ).transpose( a => a)
res10: Seq[Seq[Int]] = List(List(1, 4), List(2, 5), List(3, 6))

但仍然返回List而不是Seq

1 个答案:

答案 0 :(得分:4)

只使用括号:

Seq( Seq(1,2,3) , Seq(4,5,6) ).transpose
//res0: Seq[Seq[Int]] = List(List(1, 4), List(2, 5), List(3, 6))

但仍然返回List而不是Seq

嗯,实际上是List is inheritor of Seq,所以毕竟你得到了一个Seq(看看结果的左边部分)。

这种行为的原因是转置实际上定义为带有参数的函数,但由于它的参数定义为implicit,您可以选择将参数替换为scala编译器(它将为您执行编译时查找)。

如果你写括号,任何一个函数必须有没有参数的重载形式,例如

def transpose() = ...

或者你必须在其中写一些东西(这实际上是语法问题)。