Latest web development tutorials

pencocokan pola scala

Scala menyediakan pola yang kuat mekanisme pencocokan, juga banyak digunakan.

Pola yang sama berisi serangkaian alternatif, yang masing-masing dimulai dengankasus kata kunci.Masing-masing berisi opsi cadangan dan pola untuk pluralitas ekspresi. Simbol panah=> memisahkan pola dan ekspresi.

Berikut ini adalah nilai integer Contoh pola sederhana yang cocok:

object Test {
   def main(args: Array[String]) {
      println(matchTest(3))

   }
   def matchTest(x: Int): String = x match {
      case 1 => "one"
      case 2 => "two"
      case _ => "many"
   }
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
many

cocok sesuai Java di switch, tetapi ditulis setelah ekspresi pemilih.Yaitu: Selector pertandingan {alternatif}.

Dengan urutan ekspresi untuk mencocokkan kode yang ditulis untuk mencoba setiap mode untuk menyelesaikan perhitungan, jika mereka menemukan ada kasus pencocokan, pencocokan sisa kasus ini tidak akan berlanjut.

Selanjutnya kita melihat tipe data yang berbeda dari pencocokan pola:

object Test {
   def main(args: Array[String]) {
      println(matchTest("two"))
      println(matchTest("test"))
      println(matchTest(1))
      println(matchTest(6))

   }
   def matchTest(x: Any): Any = x match {
      case 1 => "one"
      case "two" => 2
      case y: Int => "scala.Int"
      case _ => "many"
   }
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
2
many
one
scala.Int

Contoh kasus pertama sesuai dengan nilai integer dari 1, kasus kedua sesuai dengan nilai string dari dua, kasus kedua sesuai dengan nilai string dari dua, kasus ketiga sesuai dengan jenis model yang digunakan untuk menentukan apakah nilai berlalu di seluruh Jenis, menggunakan isInstanceOf dibandingkan untuk menentukan jenis, pencocokan pola yang lebih baik. Kasus keempat menunjukkan default penuh pertandingan alternatif, pertandingan yang tidak ditemukan di pertandingan lain, saklar serupa di default.


Gunakan Contoh Kelas

Gunakan kasus kata kunci definisi kelas kelas sampel (kelas kasus), kelas sampel adalah kelas khusus, dioptimalkan untuk pencocokan pola.

Berikut ini adalah contoh sederhana dari kelas sampel:

object Test {
   def main(args: Array[String]) {
   	val alice = new Person("Alice", 25)
	val bob = new Person("Bob", 32)
   	val charlie = new Person("Charlie", 32)
   
    for (person <- List(alice, bob, charlie)) {
    	person match {
            case Person("Alice", 25) => println("Hi Alice!")
            case Person("Bob", 32) => println("Hi Bob!")
            case Person(name, age) =>
               println("Age: " + age + " year, name: " + name + "?")
         }
      }
   }
   // 样例类
   case class Person(name: String, age: Int)
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

Ketika Anda mendeklarasikan contoh kelas, prosedur berikut terjadi secara otomatis:

  • Setiap konstruktor parameter menjadi val, kecuali secara eksplisit dinyatakan sebagai var, tapi itu tidak dianjurkan;
  • Menyediakan menerapkan metode objek yang terkait, sehingga Anda dapat membangun objek tidak dapat menggunakan kata kunci baru;
  • Metode unapply tersedia memungkinkan pencocokan pola dapat bekerja;
  • Menghasilkan toString, sama, hashCode dan menyalin metode, kecuali layar menunjukkan definisi untuk metode tersebut.