3
object Initialization {

  def main(args: Array[String]): Unit = {

    val list = Traversable(1,2,4,5)

    //list.foreach(println)

    println( list.getClass.getSimpleName )

  }

}

印刷$colon$colonしますが、私はのようなものを期待していListました。このあいまいな名前はどういう意味ですか?

4

1 に答える 1

6

これListは、ケースクラス::とオブジェクトの上にある封印されたスーパークラスであるためです(リストドキュメントの既知のサブクラスNilのセクションを参照してください)。はconsと発音され、ほとんどの従来の関数型プログラミング言語のlistcons演算子にちなんで名付けられています。::

リストヘッドは実際にはcaseクラスのインスタンスであり::、Scalaは名前マングリングを使用してJVM上の非単語クラス名を表す$colon$colonため、リフレクションを使用して名前を取得することになります。

更新:クラス名を何に使用しようとしているのか正確にはわかりませんが、stringPrefix代わりに使用できる可能性があります。これは、拡張するものすべてに対して定義されておりGenTraversableLike、ほとんどすべてのScalaコレクションタイプになります。

クラス名を使用して制御フローを実行しようとしている場合は、おそらく別のことを試してください。パターンマッチングはうまく機能します。例:

xs match {
  list: List[_] => // do list stuff
  set: Set[_] => // do set stuff
}
于 2012-11-01T19:58:31.113 に答える