12

Setを使用してScalaでを作成すると、Set(1, 2, 3)が得られますimmutable.Set

scala> val s = Set(1, 2, 3)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

Q1:これは実際にどのようなセットですか?ハッシュセットですか?たとえば、ルックアップの複雑さは何ですか?

Q2:この「セット作成」方法についてはどこで読むことができますか?これはメソッドだと思いましたapplyが、ドキュメントには「このメソッドを使用すると、セットを述語として解釈できます。このセットに要素elemが含まれている場合は、trueが返されます」と記載されています。


同様に、Listusingを作成するList(1, 2, 3)と、

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.getClass
res13: java.lang.Class[_] = class scala.$colon$colon

Q3:繰り返しますが、何が得られますか?scala.collectionこの場合、 -packageの一部でもないため、変更可能かどうかをすぐに判断することさえできません。なぜこれがscalaパッケージに含まれているのですか?

Q4: APIのどこで、この「リスト作成」メソッドについて読むことができますか?

4

3 に答える 3

22

Q1:この特定のケースSet3では、正確に3つの引数の不変のセットであるを取得します。おそらく、if-elseif-elseを使用して包含をチェックします。4つを超える要素のセットを作成すると、不変のハッシュセットが得られます。

applyQ2:クラスではなく、オブジェクトSetのメソッドを確認する必要があります。Setクラスのapplyメソッドは、実行時に呼び出されるものですsomeSet(something)

Q3:scala。::は、空ではない不変の単一リンクリストです(List()引数なしで実行するNilと、不変の空のリストになります)。scala基本パッケージに含まれるほど基本的であると見なされるため、パッケージ内に存在します。

Q4:Q2を参照してください。

于 2010-06-30T13:16:14.980 に答える
12

Q3に対するsepp2kの優れた回答に追加するだけです。

scala基本パッケージに含まれるほど基本的であると見なされるため、パッケージ内に存在します。

これはScala2.7に適用されます

Scala 2.8では、コレクションクラスが再編成され、::クラスはに存在scala.collection.immutableし、名前scala.::はのタイプエイリアスになりscala.collection.immutable.::ます。

Welcome to Scala version 2.8.0.RC5 (OpenJDK 64-Bit Server VM, Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.getClass
res0: java.lang.Class[_] = class scala.collection.immutable.$colon$colon

scala> scala.::
res1: collection.immutable.::.type = scala.collection.immutable.$colon$colon$@6ce5d622
于 2010-06-30T13:29:36.303 に答える
1

でgetClassメソッドを呼び出す場合

scala> val list = List(1,2,3,45)
list: List[Int] = List(1, 2, 3, 45)

scala> val seq = Seq(1,2,3,4,5)
seq: Seq[Int] = List(1, 2, 3, 4, 5)

scala> list.getClass
res13: Class[_ <: List[Int]] = class scala.collection.immutable.$colon$colon

scala> seq.getClass
res14: Class[_ <: Seq[Int]] = class scala.collection.immutable.$colon$colon

これは、scala.collection.immutable.Listが抽象クラスであり、scala.Nilクラスとscala。::の2つの実装が付属しているためです。Scalaでは、::は有効な識別子であり、これを使用してクラスに名前を付けることができます。Nilは空のリストを表し、scala。::は空でないリストを表します。

于 2014-03-27T03:44:38.603 に答える