Scala のパターン マッチングは Java の switch と同等です
Java では次のようになります。 switch と casedefault で構成される基本構文。Scala では match と case があります。default の役割は case に置き換えられます。
val a=10 val b=20 var c='+' c match { case '+'=> println(a+b) case '-'=> println(a-b) case _ =>println("错误的运算符") }
Scala ではデフォルトでは、
case _ はこのケースから次のケースまで実行されます。これは、上記のどの状況も満たされないことを意味します。特定の範囲に一致するデータを表現したい場合、パターンマッチングに条件ガードを追加する必要があります
val x=3.153 val value: Any = x match { case i: Double if i >= 0 => i case j: Double if j < 0 => -j case _ => "type illegal" }
型マッチング:
関数を定義する場合、パラメータはすべてオブジェクトです 親クラス Any
def function(x:Any): Unit ={ x match { case s:String =>println("字符串") case i:Int=>println("整数") case d:Double=>println("小数") case _ =>println("其他") } }
オブジェクトのマッチングはより複雑です。単純な比較はアドレス値の比較です。アドレス値2 つの変数は明らかに異なります
object Test_03MatchObject { def main(args: Array[String]): Unit = { val sss: person1 = person1("sss", 1) sss match { case person1("sss",1)=>println("victory") case _=>println("defite") } } class person1(val name: String,val age :Int){ } object person1{ def apply(name: String, age: Int): person1 = new person1(name, age) def unapply(arg: person1): Option[(String, Int)] = if (arg==null) { None } else{ Some(arg.name,arg.age) } } }
このメソッドは主にオブジェクト (一致するオブジェクト) を解析するために使用されます
サンプル クラス:
サンプル クラスの main 属性のデフォルトは val です。var を使用する必要がある場合は、マーク
上記のクラスとオブジェクトをコメントして、新しいサンプルを作成しますクラス: (大量に使用されます)
case class person1(val name: String,val age :Int)
部分関数:
部分関数の省略形:
部分関数は、を使用するシナリオでも使用できます。マップ
部分関数の使用:
val list = List(List(1, 2, 3, 4), List(1), List(8, 5)) val list1: List[Int] = list.collect({ case List(x, y, _*) => y }) println(list1)
暗黙の変換:
二次コンパイルを行うために型を変換するために使用されます。
個人的な理解:
暗黙的な関数:
例: Int 型データに対して存在しないメソッドを呼び出します:
class MyRichInt(val self :Int) { def myMax(int: Int):Int = { if (int>self) int else self } }
(2) メイン関数内でコンバータを定義
導入 ---- 先頭で暗黙的 次に暗黙的変換関数を定義します
implicit def changeInt(self:Int) = { new MyRichInt(self) }
暗黙的変換方法が同じで競合する場合独自のメソッド、独自のメソッドが使用されます (コンパイルが失敗しないため -- 暗黙的変換の公式定義)
暗黙的パラメーター:
ここで新しい概念を紹介します。暗黙的なパラメーター
パラメーターの比較例:
implicit val name:String="lisi" def sayhi(implicit name: String="sd"): Unit = { println(s"hi $name") } sayhi sayhi()
実行結果:
暗黙的クラス:
暗黙的変換の対象クラスが暗黙的クラスに変換される場合、メインで新しい暗黙的クラスを作成する必要がない場合は、 function
、指定した関数
を直接呼び出すことができます。以上がJava Scala でのパターン マッチングと暗黙的変換の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。