でタプル変数宣言で大文字を持つことができませんは、なぜ我々は、我々はタプル変数に大文字を持つことができないのはなぜScalaの
val (trainingData, TestData): Tuple2[RDD[LabeledPoint],RDD[LabeledPoint]] = (splits(0), splits(1))
でタプル変数宣言で大文字を持つことができませんは、なぜ我々は、我々はタプル変数に大文字を持つことができないのはなぜScalaの
val (trainingData, TestData): Tuple2[RDD[LabeledPoint],RDD[LabeledPoint]] = (splits(0), splits(1))
これは、ケースに通常の変数を作成していないためです。
val (trainingData, TestData) =
これは、左側のパターンマッチングを使用して右側の式を解くことです。従って、のパターンマッチングの変数は、小文字で始まる必要があります。
val (trainingData, TestData) = (split(0), split(1))
は、それが常に唯一の始動時に小文字の変数を受け入れるため失敗trainingData、テストデータに2つの分割された値を代入しようとし
(split(0), split(1)) match {
case (trainingData, TestData) => (trainingData, TestData)
}
と同等になります。
むしろ、この意志はこれが意味
val (trainingData, testData) = (split(0), split(1))
正常に動作し、
(split(0), split(1)) match {
case (trainingData, testData) => (trainingData, testData)
}
は、この情報がお役に立てば幸い!
Scalaでは、大文字の先頭に変数を作成できます。
val TestCnt = 7
しかし、パターンマッチングによって変数を作成するときは、この操作を実行できません。
val (ch, num) = ('x', 17) // OK
val (Run, distance) = (true, 5) // error: not found: value Run
それはなぜですか?これは、コンパイラが "定数パターン"と "可変パターン"を区別する必要があるためです。これは、Section 15.2, "Kinds of Patterns" [PiS(1st Edition)]で詳細に説明されていますが、大文字の大文字は定数と見なされ、パターンはこの値と正確に一致しなければならず、先頭の小文字は変数とみなされますこれは任意の値と一致し、その変数も値にバインドされます。
someTuple match {
case ('t', 42) => /*will match only if both elements match these values*/
case (_, TestCnt) => /*will match only if 2nd element same value as TestCnt*/
case (c, n) => /*will match any 2-ple, variables c,n bound to values*/
}
それは小文字-ある変数規則(使用バッククォート)の回避策があることは注目に値しますが、大文字は、ある一定のルールを回避する方法はありません。
説明していただきありがとうございますが、開始時に小文字の変数が必要なのはなぜですか? – wctapasadan
小文字の変数は、変数を値とバインドするために使用されます。ここでは、大文字の変数を変数名と一致させるために使用されます。これは、https://stackoverflow.com/questions/35217913/whycant-upper-case-定義する値のためのパターンマッチングのための使用文字 –