Scalaのパターンマッチング

パターンマッチング

// Scalaは全くありませんジャワスイッチケース、文法対応する、Scalaはより強力提供マッチケースそのパターンマッチング、文法を、別のようなスイッチの場合一致する場合は、パターンマッチングと呼ばれます

//スカラマッチケースのJava スイッチの場合、その最大の違い、ジャワスイッチケースのみの可変比の値が一致1 2 3 など;およびスカラ一致場合、このような変数のような様々な状況を一致させることができるがタイプ、値のない集合の要素、又は値

//一致ケース構文は次の通りである:可変マッチ{ケースの=> コード} 値は下線が引かれている場合は、それが満たされていないどのように上記に対処するすべてのケースでデフォルトを表します。さらに、一致場合は、限りケース分岐が成立と判定されたプロセスは、次には続行されませんケースの分岐。(とJavaの異なる、ジャワスイッチケースに必要なブレーク停止)

//一致ケース基本的なアプリケーションのための構文は、可変パターンマッチングの値であります

 

// ケース:性能評価

デフjudgeGrade(グレード:文字列){

  グレードマッチ{

    場合 "A" =>のprintln( "優秀")

    ケース "B" => printlnの( "グッド")

    ケース "C" => printlnを( "ちょうどまあまあ")

    ケース_ => printlnを( "あなたが懸命に働く必要があります")

  }

}

 

 

 

パターンマッチングに使用する場合には警備員

 

// Scalaの構文パターンマッチングが存在することができる特性である場合のみならず、値、決意した後の状態は、それ以降の値と組み合わせることができるならば、ガード、二重濾過

 

// ケース:性能評価(アップグレード版)

デフjudgeGrade(名称:文字列、グレード:文字列){

  グレードマッチ{

    ケース "A" => printlnの(名前+ "あなたが優れています")

    ケース "B" => printlnの(名前+ "あなたが優れています")

    ケース "C" => printlnの(名前+ "あなただけまあまあです")

    ケース_名==「レオ」=> printlnの場合(名前+「を、あなたはいい子です、来ます」)

    ケース_ => printlnを(「あなたが懸命に働く必要があります」)

  }

}

 

 

 

パターンマッチングにおける変数代入

//スカラのパターンマッチング構文は、デフォルトモードで一致させることができる、という特徴があり、下線、変数名に置き換えられ、その後、構文の試合をパターンマッチングの値がこの変数に代入されますが、その裏にすることができます一致する値を使用して処理文

// なぜこの構文を持っていますか?考えてみてください。限りの使用などのため、ケースの値にマッチした、我々は、これはちょうどそれではありません知っています!この中ケース処理文、直接既知の値を使用することができますプログラムを書くされていません!

// しかし、アンダースコアのために_ この場合、以前のすべて満たしていない場合は、値を入力します_ 我々はそれを処理するための書類を扱うに特定の値を取得する必要がある場合には、そのようなデフォルトは、この時点で処理されますか?これは、パターンマッチングではこの構文変数への代入を使用する必要があります!

 

// ケース:性能評価(アップグレード版)

デフjudgeGrade(名称:文字列、グレード:文字列){

  グレードマッチ{

    ケース "A" => printlnの(名前+ "あなたが優れています")

    ケース "B" => printlnの(名前+ "あなたが優れています")

    ケース "C" => printlnの(名前+ "あなただけまあまあです")

    名前==「レオ」=> printlnの場合ケース_grade(名前+ + _grade「あなたはいい子です、是非、あなたのグレードがあります」)

    ケース_grade => printlnを(+ _grade「あなたが懸命に働く必要がある、あなたのグレードがあります」)

  }

}

 

パターンマッチングタイプ

// Scalaの強力な場所をパターンマッチングでは、直接タイプではなく、値を一致させることができますということです!これは、Javaのスイッチケースは絶対に不可能。

// 理論的知識:どのように試合を入力するには?その他の構文のマッチング値は実際には同じですが、しかし、マッチタイプは、その後、「使用することですケース変数タイプ=> コード」ではなく「の値が一致するよりも、この構文を、ケースの=> コード」という構文を。

 

// 例:例外処理

輸入java.io._

 

DEFのProcessException(E:例外){

  Eマッチ{

    ケースE1:はIllegalArgumentException => printlnを( "あなたは不正な引数を持つ例外は次のとおりです!" + E1)

    ケースE2:FileNotFoundExceptionを=> printlnを(「あなたが!例外を読み書き必要なファイルがある見つけることができません:」+ E2)

    ケースE3:IOExceptionを=> printlnを( "あなたはIO操作をしていた中にエラーが発生しました例外は次のとおりです!" + E3)

    ケース_:例外=> printlnを(「あなたが持っている例外を知ることができません!」)

  }

}

 IllegalArgumentException:間違ったパラメータの型

 

 

以下のための配列リストのパターンマッチングのための

// のための配列パターンマッチング、それぞれ、配列内の指定された要素と一致させることができる、配列要素の指定された数を有するアレイの要素で始まります

// するために一覧表示し、パターンマッチングを、配列が似ていますが、の使用が必要ですリスト特定:: 演算子を

 

// 例:友人に挨拶

DEFグリーティング(ARR:配列[文字列]){

  ARRマッチ{

    ケース・アレイ( "レオ")=> printlnを( "こんにちは、レオ!")

    ケース・アレイ(girl1、girl2、girl3)=> printlnを( "こんにちは、はじめまして女の子、。" + girl1 + "と" + girl2 + "と" + girl3)

    ケース・アレイ( "レオ"、_ *)=> printlnを( "こんにちは、レオは、私にお友達を紹介してください。")

    ケース_ => printlnを( "ねえ、あなたは?")

  }

}

 

 

 

DEFグリーティング(リスト:リスト[文字列]){

  リストマッチ{

    ケース "レオ" ::無記号=> printlnを( "こんにちは、レオ!")

    ケースgirl1 :: girl2 :: girl3 ::無記号=> printlnを( "こんにちは、はじめまして女の子、。" + girl1 + "と" + girl2 + "と" + girl3)

    ::テール=> printlnを(「こんにちは、レオは、私にお友達を紹介してください。」)の場合、「レオ」

    ケース_ => printlnを( "ねえ、あなたは?")

  }

}

 

 

 

ケースクラスは、パターンに一致します

 

// Scalaは、特別なクラスを提供ケースクラスが宣言し、中国のサンプルは、クラス参照することができます。ケースクラスは、実際に似ていたJava のJavaBean 概念。そののみ定義されるフィールド、およびによってスカラ自動的にコンパイル時の提供ゲッターセッターメソッドが、しかし全く存在しない、方法

// ケースクラスのコンストラクタは、主なパラメータは、通常は使用する必要はありません受け入れVAR またはvalは、修正Scalaは自動的に使用しますvalが変更された(しかし、あなたが使用している場合varが変更され、まだ続くvarが来ます)

//スカラ自動的ケースクラスは、コンパニオン・オブジェクトが定義され、オブジェクト、および定義適用()コンストラクタの同じ主要パラメータを受信方法、および戻りケースクラスのオブジェクトを

 

// ケース:学校へのアクセス

クラスPerson

ケースクラスの先生(名:文字列、件名:文字列)が人を拡張します

ケースクラスの学生(名:文字列、教室:文字列)が人を拡張します

 

DEF judgeIdentify(P:人){

  Pマッチ{

    ケース教師(名前、サブジェクト)=>のprintln(+名+ "先生、名前は" "被験者は" +被験体)

    ケース学生(名前、教室)=> printlnを(+名+ "学生は、名前は" +教室 "教室があります")

    ケース_ => printlnの(「不正アクセス、学校の外に出てください!」)

  }  

}

 

 

 

 

 

 

 

 

オプションとパターンマッチング

// Scalaは、特殊なタイプを持っていると呼ばれるオプションオプション二つの値は、1であるの一部、それは1つがなく、値表現なしに値を示しません。

//オプション通常、パターンマッチングに使用されるが、より、値又は全く値を決定するために使用される変数があるヌルより簡潔に

//オプションので使用量は、マスターしなければならないスパークソースコードの多用させるオプションなど、いくつかの(A)は、sはいずれもこの文法の、理解できてはならないオプション読み取ることができるように、パターンマッチングをスパーク源。

 

// ケース:結果の照会

ヴァルグレード=マップ( "レオ" - > "A"、 "ジャック" - > "B"、 "ジェン" - > "C")

 

DEF getGrade(名称:String)を{

  ヴァル・グレード= grades.get(名)

  グレードマッチ{

    ケースのいくつか(グレード)=> printlnを(+グレード "あなたのグレードがあります")

    ケースなし=> printlnを(「申し訳ありませんが、あなたのグレード情報がシステムにありません」)

  }

}

 

おすすめ

転載: www.cnblogs.com/YuanWeiBlogger/p/11442111.html