阅读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
答案 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() = ...
或者你必须在其中写一些东西(这实际上是语法问题)。