Rumah > Java > javaTutorial > Cara menggunakan fungsi separa dan fungsi terpakai separa dalam Java dan Scala

Cara menggunakan fungsi separa dan fungsi terpakai separa dalam Java dan Scala

王林
Lepaskan: 2023-04-21 16:31:18
ke hadapan
1203 orang telah melayarinya

Fungsi Separa

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
Salin selepas log masuk

Terdapat beberapa kaedah di dalam fungsi separa, seperti isDefinedAt, OrElse, andThen, applyOrElse, dsb.

isDefinedAt

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")) */
Salin selepas log masuk

orElse

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
Salin selepas log masuk

Dengan cara ini, newPF mempunyai kesan yang sama seperti PF asal.

danKemudian

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
Salin selepas log masuk

applyOrElse

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
Salin selepas log masuk

Fungsi Gunaan Separa

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
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan