1

Scalaリスト内のすべてのオブジェクトは同じタイプである必要があり、異なるタイプのコレクションが必要な場合はタプルを使用する必要があるという印象を受けました。

ScalaのドキュメントからList

タイプの要素の順序付けられたコレクションを表す不変のリンクリストのクラス。

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

scala> val l1 = List(1,2,3, "oh really?!")
l1: List[Any] = List(1, 2, 3, oh really?!)

これは当てはまらないようです。結局のところAny、それ自体が有効なScalaタイプであり、すべてをそれに還元することができます。

どうか明らかにしてください

4

1 に答える 1

11

リストのタイプを明示的に指定せず、2つのタイプのオブジェクトを入力した場合、これを「Any」タイプのリストにし、ルールに違反しないようにすると便利なようです。別のケースであると言っていた場合(たとえばval l1: List[Int] = List(1,2,3, "oh really?!")、タイプの不一致があることがわかります)

常にAnyに解決されるとは限りません。Vehicleというクラスと、それを継承するBikeとCarという2つのクラスがあるとします。

val car = new Car
val bike = new Bike
val vehicleList = List(car, bike)

VehicleListはVehicleタイプになります。そこに車か自転車だけを入れていたら、それはその特定のタイプだったでしょう。

オプションの背景情報:Scalaのリストは共変です。つまり、IntとStringがAnyのサブタイプである場合、List[Int]とList[String]もList[Any]のサブタイプです。これは、整数と文字列を含むリストを持つことができることを意味し、ステートメントが有効であり、自動的にList[Any]になる理由です。ちなみに、これは必ずしも特定の事実ではなく、リストが変更可能である場合、実際に問題を引き起こす可能性があります。幸い、Scalaのデフォルトのリストはそうではありません。詳細を知りたい場合は、共分散、不変、反変性を平易な英語で説明しています。

于 2013-02-02T18:26:35.220 に答える