:::
scalaと++
operatorの違いは何ですか? ドキュメントによると、動作は同じです。
質問する
7444 次
3 に答える
37
++
これらは、 anyTraversable
で使用:::
でき、リストでのみ使用できることを除いて、同じことを行います。また、 で終わるメソッド:
は右側のオブジェクトで呼び出されるため、:::
の引数はプレフィックスであり、++
の引数はサフィックスです。
于 2012-10-16T15:44:49.980 に答える
14
動作は同じです。違いは、受け入れるタイプにあります。
:::
のみを受け入れますList
。++
受け入れは、下限が上限であり、その間の型である型を受け入れることを[B >: A, That]
意味する型の範囲です。++
List
GenTraversableOnce[B]
したがって、型階層図でGenTraversableOnce
は、trait を拡張し、のスーパータイプであるクラスList
が有効です。
List と LinkedList を使用した例は、この動作を示しています。
scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)
scala> val l2 = List(4,5,6)
l2: List[Int] = List(4, 5, 6)
scala> l ++ l2
res0: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> l ::: l2
res1: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> import scala.collection.mutable.LinkedList
import scala.collection.mutable.LinkedList
scala> val ll = LinkedList(1,2,3)
ll: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3)
scala> ll ++ l2
res2: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5, 6)
scala> ll ::: l2
<console>:11: error: type mismatch;
found : scala.collection.mutable.LinkedList[Int]
required: List[?]
ll ::: l2
また、結合性に関する Kim のメモも参照してください。
于 2012-10-16T16:36:51.933 に答える
0
@lukas、この投稿も役立つかもしれません。リストの Scala API から ::: を解釈する方法は? その投稿(私のもの)の質問に対する他の人からの回答は、 ::: メソッドが何をするのかを理解するのに役立ちましたが、++ メソッドとは対照的ではありません。しかし、これを含めると役立つと思いました。
于 2012-10-16T16:53:21.923 に答える