"Satu" case2 =>"Dua" case3 =>"T"/> "Satu" case2 =>"Dua" case3 =>"T">

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

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

王林
王林ke hadapan
2023-04-21 16:31:181157semak imbas

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

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")) */

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

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

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

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

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam