Latest web development tutorials

Scala extractor (Extractor)

Extractor dikonfigurasi untuk mengekstrak parameter dari objek berlalu untuk itu dari objek.

Scala perpustakaan standar berisi sejumlah extractor yang telah ditetapkan, kita akan melihat mereka dengan kasar.

Scala adalah metode ekstraksi objek dengan unapply dari. Metode unapply dianggap menerapkan metode membalikkan: unapply menerima sebuah objek dan ekstrak nilai dari objek, nilai nilai diekstraksi biasanya digunakan untuk membangun objek.

Contoh berikut menunjukkan alamat email objek ekstraksi:

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
      }
   }
}

Pelaksanaan kode di atas, output adalah:

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

Tujuan di atas mendefinisikan duametode: berlaku dan metode unapply.Kita tidak perlu menerapkan metode dengan menggunakan operator baru untuk membuat objek. Jadi Anda dapat membuat string "[email protected]" oleh pernyataan Test ( "Zara", "gmail.com").

Metode unapply dianggap menerapkan metode membalikkan: unapply menerima sebuah objek dan ekstrak nilai dari objek, nilai nilai diekstraksi biasanya digunakan untuk membangun objek. Contoh metode yang kita gunakan untuk mengekstrak akhiran unapply nama pengguna dan alamat e-mail dari objek.

Metode unapply kembali ada di alamat e-mail yang masuk bukan contoh tali. Kode berikut menunjukkan:

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

Menggunakan pencocokan ekstraksi pola

Ketika kita instantiate kelas, Anda dapat mengambil nol atau lebih parameter, compiler dipanggil ketika sebuah instance dari menerapkan metode. Kita dapat mendefinisikan dan menerapkan metode dalam objek kelas.

Seperti yang telah disebutkan sebelumnya, unapply digunakan untuk mengekstrak nilai yang kita tentukan untuk menemukan, sebaliknya itu berlaku operasi. Ketika kita menggunakan laporan pertandingan di objek ekstraksi, unapply akan dilakukan secara otomatis, sebagai berikut:

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
}

Pelaksanaan kode di atas, output adalah:

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