1

私は初心者でscala、一行で立ち往生しています。私はscalaワークシートで作業しています

     type Bit = Int

     var acc: List[Bit]=List()                        //> acc  : List[Listpr.Bit] = List()

     acc:+1                                           //> res0: List[Int] = List(1)

     "ins"+acc:+1                                     //> res1: scala.collection.immutable.IndexedSeq[AnyVal] = Vector(i, n, s, L, i, 
                                                  //| s, t, (, ), 1)
     println("ins"+acc:+1)                         //> Vector(i, n, s, L, i, s, t, (, ), 1)

の意味を取得できません。追加:+すると、のベクトルコレクションに 変換されますscala"ins"+acc:+1scala

誰かこれで私を助けてください?

4

4 に答える 4

4

scala docsはそれをかなりよく説明していると思います。

A copy of this list with an element appended.

scala> acc
res3: List[Bit] = List()

scala> acc :+ 1
res4: List[Int] = List(1)

scala> acc
res5: List[Bit] = List() 

基本的に、それを行うacc:+1と、要素をコピーしaccて追加する新しいリストが作成1されます。に変更はありませんacc

うーん、タイプミスだと思います。私はあなたが意味すると思います ("ins" :: acc ):+1

scala> "ins"+acc:+1
res8: scala.collection.immutable.IndexedSeq[AnyVal] = Vector(i, n, s, L, i, s, t
, (, ), 1)

scala> "ins":+acc:+1
res9: scala.collection.immutable.IndexedSeq[Any] = Vector(i, n, s, List(), 1)

scala> ("ins" :: acc) :+ 1
res10: List[Any] = List(ins, 1)

"ins"+acc:+1scala の String は暗黙的に であるため、示されているように出力されIndexedSeqます。「ins」+acc を実行するのは、基本的に"ins"+acc.toStringどちらが"insList()". 今"insList()"はタイプIndexedSeq[Char]です。それを行うと、 as ( and ):+ 1に変換されます。したがって、次のようにシーケンスを出力します。IndexedSeq[AnyVal]String <: AnyValInt <:AnyVal

于 2013-10-09T06:09:47.853 に答える
0

ドキュメントから直接、:+「要素が追加されたこのリストのコピー」が返されます。つまり追加します。

acc:+1List(1)これはあなたが期待するものです。1空のリストに追加します。

"ins"+acc:+1"ins"+acc最初に評価され、文字列 "acc" とその文字列表現acc`insList(). 次に、文字列に対して:+が呼び出され、insList()自動的に文字列に変換され、Listが追加され1ます。最後に、これにより結果が得られますscala.collection.immutable.IndexedSeq[AnyVal] = Vector(i, n, s, L, i, s, t, (, ), 1)

于 2013-10-09T06:09:36.553 に答える
0

他の良い答えに加えて、自分で scaladoc を参照することをお勧めします。

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.List

自分自身でいくつかのことを発見することで、言語と標準ライブラリに対する自信が高まります。これをstackoverflowに投稿するのにかかった時間の中で、

  • :+ がシーケンスに追加されるのと同じように、先頭に要素が追加されたリストのコピーを返す +: があることに注意してください。

  • リストの「Scala のコレクション ライブラリの概要」セクションを参照するよう求める「参照」に注意してください。これも非常に目を見張るものがあります。

  • この宝石を読んでください。

この素晴らしい、簡潔で表現力豊かな (そして紛らわしい!) 言語をお楽しみください。

于 2013-10-20T17:48:00.887 に答える