Pengekstrak Skala
Pengekstrak mengekstrak parameter yang digunakan untuk membina objek daripada objek yang dihantar kepadanya.
Pustaka standard Scala mengandungi beberapa pengekstrak yang telah ditetapkan, kami akan melihatnya secara ringkas.
Pengekstrak Scala ialah objek dengan kaedah yang tidak digunakan. Kaedah nyah guna ialah operasi terbalik bagi kaedah guna: nyahguna menerima objek dan kemudian mengekstrak nilai daripada objek Nilai yang diekstrak biasanya nilai yang digunakan untuk membina objek.
Contoh berikut menunjukkan objek pengekstrak alamat e-mel:
object Test { def main(args: Array[String]) { println ("Apply 方法 : " + apply("Zara", "gmail.com")); println ("Unapply 方法 : " + unapply("Zara@gmail.com")); 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 } } }
Laksanakan kod di atas, hasil output ialah:
$ scalac Test.scala $ scala Test Apply 方法 : Zara@gmail.com Unapply 方法 : Some((Zara,gmail.com)) Unapply 方法 : None
Objek di atas mentakrifkan dua kaedah: gunakan kaedah dan nyahpakai. Dengan kaedah guna kita boleh mencipta objek tanpa menggunakan operasi baharu. Jadi anda boleh membina rentetan "Zara@gmail.com" melalui pernyataan Test("Zara", "gmail.com").
Kaedah unapply ialah operasi terbalik bagi kaedah apply: unapply menerima objek dan kemudian mengekstrak nilai daripada objek Nilai yang diekstrak biasanya nilai yang digunakan untuk membina objek. Dalam contoh yang kita gunakan Kaedah Nyahpakai mengekstrak nama pengguna dan akhiran alamat e-mel daripada objek.
Kaedah nyah guna dalam contoh mengembalikan Tiada apabila rentetan masuk bukan alamat e-mel. Demonstrasi kod adalah seperti berikut:
unapply("Zara@gmail.com") 相等于 Some("Zara", "gmail.com") unapply("Zara Ali") 相等于 None
Pengekstrak menggunakan padanan corak
Apabila kita membuat instantiate kelas, kita boleh membawa 0 atau lebih parameter, dan pengkompil akan membuat instantiate itu The apply kaedah akan dipanggil. Kita boleh menentukan kaedah penggunaan dalam kedua-dua kelas dan objek.
Seperti yang kami nyatakan sebelum ini, unapply digunakan untuk mengekstrak nilai yang kami tentukan untuk mencari, iaitu bertentangan dengan apply. Apabila kita menggunakan pernyataan padanan dalam objek pengekstrak, unapply akan dilaksanakan secara automatik, seperti yang ditunjukkan di bawah:
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 }
Melaksanakan kod di atas, hasil output ialah:
$ scalac Test.scala $ scala Test 10 10 是 5 的两倍!