「Scalaでのプログラミング:包括的なステップバイステップガイド」(Martin Odersky、Lex Spoon、Bill Venners)からの次の抜粋は、両方の質問に直接対応していると思います。
タプルの要素へのアクセス
たとえば、「pair(0)」を使用して、リストの要素のようなタプルの要素にアクセスできないのはなぜか疑問に思われるかもしれません。その理由は、リストのapplyメソッドは常に同じタイプを返しますが、タプルの各要素は異なるタイプである可能性があるためです。_1は1つの結果タイプ、_2は別の結果タイプなどになります。これらの_N番号は、ゼロベースではなく1ベースです。これは、1から始まるのは、HaskellやMLなどの静的に型付けされたタプルを持つ他の言語によって設定された伝統だからです。
Scalaタプルは、コンパイラによってscala.Tuplen( a1、...、)クラスのインスタンス化'(' a1, ..., an ')'
のエイリアスとして扱われる式を除いて、言語構文に関する限り、ほとんど優先的に扱われません。それ以外の場合、タプルは他のScalaオブジェクトと同じように動作します。実際、タプルは、Tuple2からTuple22の範囲のケースクラスとしてScalaで記述されています。Tuple2とTuple3は、それぞれペアとトリプルのエイリアスでも知られています。
val a = Pair (1,"two") // same as Tuple2 (1,"two") or (1,"two")
val b = Triple (1,"two",3.0) // same as Tuple3 (1,"two",3.0) or (1,"two",3.0)