Latest web development tutorials

Scala Extractor (ดูด)

ดูดและมีการกำหนดค่าพารามิเตอร์ในการสกัดของวัตถุที่ส่งผ่านไปได้จากวัตถุ

ห้องสมุดมาตรฐาน Scala มีจำนวนที่กำหนดไว้ล่วงหน้าระบายเราจะมองพวกเขาอย่างเกรี้ยวกราด

Scala เป็นวิธีการสกัดวัตถุ unapply ของ วิธีการยกย่อง unapply ใช้วิธีการย้อนกลับ: unapply ยอมรับวัตถุและสารสกัดค่าจากวัตถุมีค่าของค่าสกัดมักจะใช้ในการสร้างวัตถุ

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงที่อยู่อีเมลวัตถุสกัด:

object Test {
   def main(args: Array[String]) {
      
      println ("Apply 方法 : " + apply("Zara", "gmail.com"));
      println ("Unapply 方法 : " + unapply("[email protected]"));
      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
      }
   }
}

การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:

$ scalac Test.scala 
$ scala Test
Apply 方法 : [email protected]
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

วัตถุดังกล่าวข้างต้นกำหนดสองวิธีใช้: ทาและวิธีการ unapplyเราไม่จำเป็นต้องใช้วิธีการโดยใช้ประกอบการใหม่ในการสร้างวัตถุ เพื่อให้คุณสามารถสร้างสตริง "[email protected]" โดยคำสั่งการทดสอบ ( "ซาร่า", "gmail.com")

วิธีการยกย่อง unapply ใช้วิธีการย้อนกลับ: unapply ยอมรับวัตถุและสารสกัดค่าจากวัตถุมีค่าของค่าสกัดมักจะใช้ในการสร้างวัตถุ ตัวอย่างของวิธีการที่เราใช้ในการแยกคำต่อท้ายชื่อผู้ใช้ Unapply และ e-mail ที่อยู่จากวัตถุ

วิธี unapply ผลตอบแทนที่ไม่มีที่อยู่อีเมลขาเข้าแทนเช่นสตริง รหัสต่อไปนี้แสดงให้เห็นถึง:

unapply("[email protected]") 相等于 Some("Zara", "gmail.com")
unapply("Zara Ali") 相等于 None

ใช้รูปแบบการจับคู่การสกัด

เมื่อเรายกตัวอย่างชั้นเรียนคุณสามารถใช้พารามิเตอร์ศูนย์หรือมากกว่าคอมไพเลอร์จะเรียกเมื่ออินสแตนซ์ของใช้วิธี เราสามารถกำหนดและใช้วิธีการในวัตถุชั้นเรียน

ในฐานะที่เรากล่าวก่อนใช้ unapply เพื่อดึงค่าที่เราระบุในการค้นหาในทางตรงกันข้ามมันใช้การดำเนินการ เมื่อเราใช้งบการแข่งขันในวัตถุสกัดคือ unapply จะได้รับการดำเนินการโดยอัตโนมัติดังต่อไปนี้:

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
}

การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:

$ scalac Test.scala 
$ scala Test
10
10 是 5 的两倍!