Ich glaube, der folgende Auszug aus "Programmieren in Scala: Eine umfassende Schritt-für-Schritt-Anleitung" (Martin Odersky, Lex Spoon und Bill Venners) geht direkt auf Ihre beiden Fragen ein:
Zugriff auf die Elemente eines Tupels
Sie fragen sich vielleicht, warum Sie nicht auf die Elemente eines Tupels wie die Elemente einer Liste zugreifen können, z. B. mit "pair (0)". Der Grund dafür ist, dass die Apply-Methode einer Liste immer denselben Typ zurückgibt, aber jedes Element eines Tupels ein anderer Typ sein kann: _1 kann einen Ergebnistyp haben, _2 einen anderen und so weiter. Diese _N-Zahlen basieren auf Eins statt auf Null, da das Beginnen mit 1 eine Tradition ist, die von anderen Sprachen mit statisch typisierten Tupeln wie Haskell und ML festgelegt wird.
Scala-Tupel werden in Bezug auf die Sprachsyntax kaum bevorzugt behandelt, abgesehen davon, dass Ausdrücke '(' a1, ..., an ')'
vom Compiler als Alias für die Instanziierung von scala.Tuplen ( a1, ..., an ) behandelt werden. Andernfalls verhalten sich Tupel wie alle anderen Scala-Objekte. Tatsächlich werden sie in Scala als Fallklassen geschrieben , die von Tuple2 bis Tuple22 reichen . Tuple2 und Tuple3 sind auch unter den Decknamen Pair und Triple bekannt:
val a = Pair (1,"two")
val b = Triple (1,"two",3.0)
productIterator
sodass in einigen Fällen ein spezifischerer Typ verwendet werden kann. Dies könnte für 2.10 kommen, aber jemand korrigiert mich, wenn ich falsch liege.