0

この質問を読んだ後、私は次のことが機能することを期待します:

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()

また、 Seqはそれを参照していますが、scalaドキュメントで転置するための参照を見つけることができないようです。

アイデンティティを提供すると、それはどういうわけかうまくいくようです:

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))

ただし、SeqではなくListを返します

4

1 に答える 1

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))

ただし、SeqではなくListを返します

実際、ListはSeqの継承者なので、結局Seqを取得しました(結果の左側を見てください)。

このような動作の理由は、実際には引数付きの関数として転置が定義されているためですが、引数は暗黙的に定義されているため、引数を代入する作業をscalaコンパイラに委任するオプションがあります(コンパイル時のルックアップが実行されます)。

括弧を書く場合、どちらの関数も引数のないオーバーロードされた形式である必要があります。

def transpose() = ...

または、それらの中に何かを書く必要があります(実際には構文の問題です)。

于 2012-11-23T13:32:05.783 に答える