1

まず、コードの 3 つのスニペットと Scala 2.10.2 での出力を次に示します。

// 1.
def one: Seq[List[String]] =
  Seq(List("x")) ++ List(List("x"))
println(one)
// => List(List(x), List(x)))

// 2.
def two: List[List[String]] =
  Seq(List("x")) ++ List(List("x"))
println(two)
// =>
// error: type mismatch;
//  found   : Seq[List[String]]
//  required: List[List[String]]
//   Seq(List("x")) ++ List(List("x"))
// one error found

// 3.
println(Seq(List("x")) ++ List(List("x")))
// => List(List(x), List(x))

3 つのスニペットすべてのメイン コードは同じです --Seq(List("x")) ++ List(List("x"))

1 番目と 3 番目のスニペットは型を として表示 (表示) しList[List[String]]ますが、戻り値の型を として指定する 2 番目のスニペットはList[List[String]]コンパイルに失敗します。最初の戻り値の型は ですSeq[List[String]]が、 として出力されますList[List[String]]

ここで正確に何が起こっているのですか?

4

2 に答える 2

0

2 番目のスニペットは、 a ではない a ( ScalaDocを参照) をSeq.++返すため、コンパイルされません。scala.collection.Seqscala.collection.immutable.List

def ++[B](that: GenTraversableOnce[B]): Seq[B]

この質問も参照してください。

于 2013-07-11T13:09:23.657 に答える