これがバグなのか、Scala を十分に理解していないのかはわかりません。今日、いくつかのリスト関数を使って REPL で遊んでいました。これが私がしたことです:
まず、リストを作成しました。
scala> val myList = List(1.0, 2.0, 3.0)
myList: List[Double] = List(1.0, 2.0, 3.0)
次に、別の double を先頭に追加して、別のリストを作成しました。
scala> val newMyList = 4.0 :: myList
newMyList: List[Double] = List(4.0, 1.0, 2.0, 3.0)
ここで、newMyList で productArity (List.productArity) を要求すると、次のようになります。
scala> print(newMyList.productArity)
2
最初のリストを他のリストとは異なる方法で扱っているようです。これは意図した動作ですか、それともバグですか?
scala> print(newMyList.productElement(0))
4.0
scala> print(newMyList.productElement(1))
List(1.0, 2.0, 3.0)
0、1 より大きい要素にアクセスしようとすると、java.lang.IndexOutOfBoundsException が発生することに注意してください。2 は 2.0 を返し、3 は 3.0 を返す必要がありますよね?