2011-08-02 4 views
2

ScalaのREPLでいくつかの例がありました。これはどのデータ型ですか、val one =(1,2,3)

Arrayオブジェクトをインスタンス化するとき(++演算子のテストを試みるとき)、完全に忘れてArrayと入力しました。

とにかく、これはどのようなデータ型ですか?

val one = (1,2,3) 

上記のコードはどのようなデータ構造またはコンテナですか?この呼び出しは何ですか?それはなぜ有用なのですか?私はREPLが上記コードの有用な情報を与えたとは思わない。

ありがとうございます。

答えて

7

これはTuple3オブジェクトを構築するための特別な構文です。

タプルはTuple22まで定義されています。タプルの重要なユースケースの1つは、関数から複数の値を返すことです。タプルはまた、特別な構文でアンパックすることができます。

scala> val (a, b, c) = one 
a: Int = 1 
b: Int = 2 
c: Int = 3 
+3

ノートで、開梱の構文についての特別なものは何も存在しないこと。それは簡単なパターンマッチングです。 – agilesteel

+0

@agilesteel:はい、パターンマッチングです。タプルのパターンマッチングの構文は、スカラ言語仕様の独自のセクション(8.1.7、タプルパターン)を取得します。 –

+0

Scala 2.9から、REPL内の式の型を尋ねることができます。 'scala>:type(1、" 2 "、true)'は '(Int、java.lang.String、Boolean)'を返します。 –

7

これはTuple3のインスタンスです。タプルは固定サイズの不変配列と考えることができ、各要素には異なる静的コンパイル時チェック型があります。

Tuple3[Int, Int, Int] 

しかし、あなたにも、様々なタイプのタプルを作成することができます:あなたの例では

が、これは正確である

one._1 // 1, Int type 
one._2 // false, Boolean 
one._3 // "a", String 

タプルは様々あります。この場合

val one = (1, false, "a") 

ユースケース。それらは、関数から2つの値(それほど多くはない)を返すために使用されます。配列やリストを使うこともできますが、すべての要素が同じ型(最悪の場合はAny)である必要がありますので、静的型チェックが緩くなります。また、そのようなシーケンスのサイズは保証されていませんが、タプルはコンパイル時に知られている固定サイズです。

タプルを軽量で一時的なオブジェクトとして扱いますが、乱用しないでください。たとえば、日/月/年を表現するのにTuple3を使用しないでください。

1

それはTuple3 [INT、INT、INT]

val one = (1,2,3) 
val two = Tuple3(1, 2, 3) 
two == one // true 
関連する問題