// ------------------------ Scalaのパターンマッチングマッチケース------------------- --------------- / * * *スイッチの場合は、唯一の値が一致するJavaスイッチケースのJavaに類似しているが、一致ケースScalaはの範囲未満であると判断することができますより広い 他の違いとJavaのスイッチケース間*は、停止するようにブレークを使用する必要のJavaのスイッチケースですが、限り応え、ケースに対処するためのScalaの分岐があるとして、それは支店でケースを判断するために続行されません * 1マッチングの値 * 2種類のマッチング * 3及びリスト要素マッチングのアレイ ケースクラス一致の* 4 * 5は、一致する値がないと 満足しない場合、上記の全てを* _下線が引かれているを表しますどのようにデフォルトの処理 * *場合IF 1ケースと、より詳細な分類での試合 *場合には、アンダーラインする必要がある_あなたが特定の値のために_これを取得する必要がある場合は、変数名に置き換えられ、この時間あなたは、変数名のケースを飲んだ後、変数に代入され、パターンマッチング構文マッチの値を取得することができます *それ以外の場合は、我々は知りません _対応した特定の値は何ですか * *オプション:一部の(a)は定数を表す値を有する、Noneは値を示していない * / // 値が一致しない 単位= DEF judgeScore(:文字列グレード){ グレード一致{ ケース " " =>のprintf(" エクセレントを" ) ケース" B " =>のprintf(" グッド" ) ケース" C " =>のprintf(" ジャストSO SO " ) ケース _ =>のprintf(" あなたが必要とする作業ハード") } } // 値マッチングが増加ガードダブルIFフィルタ DEF judgeScore1(グレード:文字列名:文字列):単位= { グレード一致{ ケース " A " =>のprintf(" 優秀" ) ケース " B " =>のprintf(" グッド" ) ケース " C " =>のprintf(" ジャストSO SO " ) ケース _ IF名== " ZM " =>のprintf(名前+ " あなたは良いです") の場合= _>のprintf(" あなたは仕事のハードを必要とする" ) } } // judgeScore1( "F."、 "ZM1") のインポートjava.io._ // 型マッチングケース変数:タイプ=>コードパターン のProcessExceptionデフ(E :例外):単位= { E一致{ ケース E1:はIllegalArgumentException =>のprintf(" 例外はIllegalArgumentException IS:" + E1) ケース E2:AにFileNotFoundException =>のprintf(" 例外にFileNotFoundException IS:" + E2) ケース E3:にIOException =>のprintf("例外のIOExceptionザIS:「 + E3) ケース _:例外=>のprintfは(」excepionが他happended " ) } // 指定で始まる配列の配列に一致するヒット数の指定された配列が一致する配列要素と一致配列要素は、この効果は、シミュレートされていない 単位= DEF greetArray(:配列[文字列] ARR){ ARRマッチ{ ケースアレイ(" レオ")=>のprintf(" こんにちは、レオ" ) ケースアレイNAME3(NAME1、NAME2、 )=>(printfの" 名前は人IS " + + NAME1 " "+ NAME2 + 」 " + NAME3) ケースアレイ(" レオ"_ *)=>のprintf(" こんにちは、レオは、Tell Meをお友達" ) ケース _ =>印刷(" こんにちは、お元気ですか" ) } } greetArray(配列(" 1 「」2 「」3 "))// 配列をシミュレートしないコールのため // オプションとパターンマッチングにスカラを / * * *オプション一方が2つだけの値のいくつかの発現値であり、一つはNoneですそれは値を意味していません パターンマッチング値のために使用* Scalaのオプションは、ヌルよりもさらに小型の値で表現されていない * / varはpersonGrade =地図(" ZM " - > " 13 "、" 梁" - > " 7 " ) するvarグレード= personGrade。取得(" ZMを")。取得 プリント(グレード) のprintln(12345 ) (:文字列名):ユニットgetGrade DEF = { VARのグレード= personGradeを。取得(名前) グレードの試合{ ケース一部(グレード)=>印刷(「あなたのグレードです」グレード) ケースなし=>印刷(" あなたがここにはありません" ) } } getGrade(" ZM2 " ) } オブジェクトのテスト{ defのメイン(引数:配列[文字列]):単位 = { VARの personGrade =地図(" ZM " - > " 13 "、" 梁" - > " 7 " ) // // プリント(personGrade.get( "ZM")を取得)。 getGradeデフ(名:文字列):ユニット=のprintln(personGrade) { VARグレード= personGrade。GET (名) グレードの試合{ ケースの一部(グレード)=>印刷(" あなたグレードはIS 「 + グレード) ケースなし=>印刷(」あなたがここに壁紙ないです「) } } // getGrade(」ZM「) //はグレードが13である結果、あなたはある // マッチングのマッチング番号に指定された配列の配列の配列に一致するように指定された要素から始まる配列要素のこの効果マッチング配列をシミュレートされていない 単位= DEF greetArray(:配列[文字列] ARR){ ARRマッチ{ ケース・アレイ(" レオ")=>のprintf(" "こんにちは、レオ" ) の場合アレイ(NAME1、NAME2、NAME3)=>のprintf(" 人の名前である" + NAME1 + " " +名2 + " " + NAME3) ケースアレイ(" レオ」、_ *)=>のprintf (" やあ、レオは、私にあなたの友人を教えて" ) の場合 _ =>印刷(" こんにちは、どのようにしている" ) } } greetArray(アレイ(LEO "))// 配列をシミュレートしません呼び出すため } }