Fungsi Separa ialah konsep matematik Ia bukan jenis "fungsi".
Fungsi Partia dalam Scala ialah Trait yang jenisnya ialah PartialFunction[A,B], yang menerima parameter jenis A dan mengembalikan hasil jenis B.
Contohnya:
val pf: PartialFunction[Int, String] = { case 1 => "One" case 2 => "Two" case 3 => "Three" case _ => "Other" } println(pf(1)) //One println(pf(2)) //Two println(pf(3)) //Three println(pf(4)) //Other
Terdapat beberapa kaedah di dalam fungsi separa, seperti isDefinedAt, OrElse, andThen, applyOrElse, dsb.
isDefinedAt: Fungsi fungsi ini adalah untuk menentukan sama ada parameter masuk berada dalam julat yang diproses oleh fungsi separa ini.
Cuba gunakan isDefinedAt() dengan pf yang baru anda takrifkan, asalkan ia adalah nombor, ia betul kerana terdapat kes _=>"Lain". Jika anda menukarnya kepada jenis lain, ralat akan dilaporkan.
val pf: PartialFunction[Int, String] = { case 1 => "One" case 2 => "Two" case 3 => "Three" case _ => "Other" } println(pf.isDefinedAt(1)) //true println(pf.isDefinedAt(2)) //true println(pf.isDefinedAt(3)) //true println(pf.isDefinedAt(4)) //true println(pf.isDefinedAt("1")) /** * 类型不匹配 * type mismatch; * found : String("1") * required: Int * println(pf.isDefinedAt("1")) */
orElse: Gunakan berbilang fungsi separa dalam gabungan, kesannya adalah serupa dengan pernyataan kes.
val onePF: PartialFunction[Int, String] = { case 1 => "One" } val twoPF: PartialFunction[Int, String] = { case 2 => "Two" } val threePF: PartialFunction[Int, String] = { case 3 => "Three" } val otherPF: PartialFunction[Int, String] = { case _ => "Other" } val newPF = onePF orElse twoPF orElse threePF orElse otherPF println(newPF(1)) //One println(newPF(2)) //Two println(newPF(3)) //Three println(newPF(4)) //Other
Dengan cara ini, newPF mempunyai kesan yang sama seperti PF asal.
danKemudian: Setara dengan panggilan berterusan kaedah, seperti g(f(x)).
Jenis pulangan hasil pf1 mesti konsisten dengan jenis input parameter pf2, jika tidak, ralat akan dilaporkan.
val pf1: PartialFunction[Int, String] = { case i if i == 1 => "One" } val pf2: PartialFunction[String, String] = { case str if str eq "One" => "The num is 1" } val num = pf1 andThen pf2 println(num(1)) //The num is 1
applyOrElse: Ia menerima 2 parameter, yang pertama ialah parameter panggilan dan yang kedua ialah fungsi panggil balik. Jika parameter panggilan pertama sepadan, nilai yang sepadan dikembalikan, jika tidak, fungsi panggil balik dipanggil.
val pf: PartialFunction[Int, String] = { case 1 => "One" } println(pf.applyOrElse(1, { num: Int => "two" })) //One println(pf.applyOrElse(2, { num: Int => "two" })) //two
Fungsi Gunaan Separa (Fungsi Gunaan Separa) juga dipanggil fungsi gunaan separa Jika dilihat dari nama Inggeris, hanya terdapat satu perbezaan perkataan antaranya dan fungsi separa (Fungsi Separa). Tetapi terdapat dunia perbezaan antara mereka.
Fungsi aplikasi separa bermakna fungsi mempunyai n parameter, dan jika kami menyediakannya dengan kurang daripada n parameter, kami mendapat fungsi aplikasi separa.
Sebagai contoh, tentukan fungsi dengan 3 parameter, dan kemudian sediakan beberapa fungsi aplikasi separa dengan 1-2 parameter yang diketahui
def add(x: Int, y: Int, z: Int) = x + y + z // x 已知 def addX = add(1, _: Int, _: Int) println(addX(2, 3)) //6 println(addX(3, 4)) //8 // x 和 y 已知 def addXAndY = add(10, 100, _: Int) println(addXAndY(1)) //111 // z 已知 def addZ = add(_: Int, _: Int, 10) println(addZ(1, 2)) //13
Atas ialah kandungan terperinci Cara menggunakan fungsi separa dan fungsi terpakai separa dalam Java dan Scala. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!