Latest web development tutorials

Scalaの抽出(抽出)

抽出は、物体側から渡されたオブジェクトのパラメータを抽出するように構成されています。

Scalaの標準ライブラリは、事前に定義された抽出器の数が含まれている、我々は大体それらを見てみましょう。

Scalaはの適用を解除してオブジェクト抽出法です。 適用解除する方法は見なさ方法が逆適用:適用解除するオブジェクトからオブジェクトおよび抽出値を受け入れ、抽出された値の値は、通常、オブジェクトを構築するために使用されます。

次の例では、抽出対象のメールアドレスを示しています。

object Test {
   def main(args: Array[String]) {
      
      println ("Apply 方法 : " + apply("Zara", "gmail.com"));
      println ("Unapply 方法 : " + unapply("[email protected]"));
      println ("Unapply 方法 : " + unapply("Zara Ali"));

   }
   // 注入方法 (可选)
   def apply(user: String, domain: String) = {
      user +"@"+ domain
   }

   // 提取方法(必选)
   def unapply(str: String): Option[(String, String)] = {
      val parts = str split "@"
      if (parts.length == 2){
         Some(parts(0), parts(1)) 
      }else{
         None
      }
   }
}

上記のコードの実装、出力は次のようになります。

$ scalac Test.scala 
$ scala Test
Apply 方法 : [email protected]
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

適用と適用解除方法上記の目的は、2つのメソッドを定義します。 私たちは、オブジェクトを作成するには、new演算子を使用して方法を適用する必要はありません。 だから、文のテスト(「ザラ」、「gmail.com」)によって文字列 "[email protected]」を構築することができます。

適用解除する方法は見なさ方法が逆適用:適用解除するオブジェクトからオブジェクトおよび抽出値を受け入れ、抽出された値の値は、通常、オブジェクトを構築するために使用されます。 我々は、物体側から接尾適用を解除ユーザ名と電子メールアドレスを抽出するために使用する方法の例。

適用解除する方法は、受信した電子メールアドレスの代わりに文字列のインスタンスでNoneを返します。 次のコードは示しています。

unapply("[email protected]") 相等于 Some("Zara", "gmail.com")
unapply("Zara Ali") 相等于 None

パターンマッチングの抽出を使用しています

私たちは、クラスをインスタンス化する際には、コンパイラがのインスタンスメソッドを適用したときに呼び出される、ゼロ以上のパラメータを取ることができます。 私たちは、クラスオブジェクトのメソッドを定義し、適用することができます。

我々は前に述べたように、適用解除するには、操作を適用逆に、我々は見つけるために指定した値を抽出するために使用されます。 私たちは、抽出対象のmatch文を使用すると、次のように適用解除、自動的に実行されますされています。

object Test {
   def main(args: Array[String]) {
      
      val x = Test(5)
      println(x)

      x match
      {
         case Test(num) => println(x + " 是 " + num + " 的两倍!")
         //unapply 被调用
         case _ => println("无法计算")
      }

   }
   def apply(x: Int) = x*2
   def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}

上記のコードの実装、出力は次のようになります。

$ scalac Test.scala 
$ scala Test
10
10 是 5 的两倍!