บทช่วยสอน Scala Extractor (ดูด) ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ ใช้รูปแบบการจับคู่การสกัด,
ดูดและมีการกำหนดค่าพารามิเตอร์ในการสกัดของวัตถุที่ส่งผ่านไปได้จากวัตถุ
ห้องสมุดมาตรฐาน Scala มีจำนวนที่กำหนดไว้ล่วงหน้าระบายเราจะมองพวกเขาอย่างเกรี้ยวกราด
Scala เป็นวิธีการสกัดวัตถุ unapply ของ วิธีการยกย่อง unapply ใช้วิธีการย้อนกลับ: unapply ยอมรับวัตถุและสารสกัดค่าจากวัตถุมีค่าของค่าสกัดมักจะใช้ในการสร้างวัตถุ
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงที่อยู่อีเมลวัตถุสกัด:
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 } } }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test Apply 方法 : Zara@gmail.com Unapply 方法 : Some((Zara,gmail.com)) Unapply 方法 : None
วัตถุดังกล่าวข้างต้นกำหนดสองวิธีใช้: ทาและวิธีการ unapplyเราไม่จำเป็นต้องใช้วิธีการโดยใช้ประกอบการใหม่ในการสร้างวัตถุ เพื่อให้คุณสามารถสร้างสตริง "Zara@gmail.com" โดยคำสั่งการทดสอบ ( "ซาร่า", "gmail.com")
วิธีการยกย่อง unapply ใช้วิธีการย้อนกลับ: unapply ยอมรับวัตถุและสารสกัดค่าจากวัตถุมีค่าของค่าสกัดมักจะใช้ในการสร้างวัตถุ ตัวอย่างของวิธีการที่เราใช้ในการแยกคำต่อท้ายชื่อผู้ใช้ Unapply และ e-mail ที่อยู่จากวัตถุ
วิธี unapply ผลตอบแทนที่ไม่มีที่อยู่อีเมลขาเข้าแทนเช่นสตริง รหัสต่อไปนี้แสดงให้เห็นถึง:
unapply("Zara@gmail.com") 相等于 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 的两倍!