Scala ตัวเลือก (Option)
Scala ตัวเลือก (Option) ชนิดใช้แทนค่าเป็นตัวเลือก (สำหรับค่าหรือไม่มีค่า)
ตัวเลือก [T] เป็นประเภทของภาชนะที่เป็นตัวเลือกค่า T: ถ้าค่าที่มีอยู่ตัวเลือก [T] เป็นบาง [T] ถ้าคุณไม่ได้อยู่ที่ตัวเลือก [T] เป็นวัตถุที่ไม่มี
ต่อไปเรามองไปที่ชิ้นส่วนของรหัส:
// 虽然 Scala 可以不定义变量的类型,不过为了清楚些,我还是 // 把他显示的定义上了 val myMap: Map[String, String] = Map("key1" -> "value") val value1: Option[String] = myMap.get("key1") val value2: Option[String] = myMap.get("key2") println(value1) // Some("value1") println(value2) // None
ในรหัสข้างต้น MyMap หนึ่งเป็นชนิดที่สำคัญคือสตริงประเภท String Value คือแผนที่กัญชา แต่ไม่เหมือนกันกับได้รับของเขา () ผลตอบแทนเป็นตัวเลือกที่ชื่อ [สตริง] หมวดหมู่
สกาล่าโดยใช้ตัวเลือก [สตริง] ที่จะบอกคุณว่า "ผมจะพยายามที่จะกลับสตริง แต่มันอาจจะไม่ให้คุณสตริง."
MyMap ไม่ได้ key2 ข้อมูลนี้ได้รับ () วิธีการส่งกลับไม่มี
ตัวเลือกที่สองหมวดหมู่ย่อยหนึ่งบางหนึ่งคือไม่มีเมื่อเขากลับมาในบางเวลาในนามของฟังก์ชั่นนี้ประสบความสำเร็จให้คุณสตริงและที่คุณสามารถ () ฟังก์ชั่นที่จะได้รับนี้ผ่านสตริงได้รับ ถ้าเขากลับไม่มีมันหมายถึงสตริงไม่สามารถให้คุณ
อีกตัวอย่างหนึ่ง:
object Test { def main(args: Array[String]) { val sites = Map("w3big" -> "www.w3big.com", "google" -> "www.google.com") println("sites.get( \"w3big\" ) : " + sites.get( "w3big" )) // Some(www.w3big.com) println("sites.get( \"baidu\" ) : " + sites.get( "baidu" )) // None } }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test sites.get( "w3big" ) : Some(www.w3big.com) sites.get( "baidu" ) : None
นอกจากนี้คุณยังสามารถส่งออกไปยังตรงกับค่าจากการจับคู่รูปแบบ ตัวอย่างมีดังนี้
object Test { def main(args: Array[String]) { val sites = Map("w3big" -> "www.w3big.com", "google" -> "www.google.com") println("show(sites.get( \"w3big\")) : " + show(sites.get( "w3big")) ) println("show(sites.get( \"baidu\")) : " + show(sites.get( "baidu")) ) } def show(x: Option[String]) = x match { case Some(s) => s case None => "?" } }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test show(sites.get( "w3big")) : www.w3big.com show(sites.get( "baidu")) : ?
getOrElse () วิธีการ
คุณสามารถใช้ getOrElse () วิธีการที่จะได้รับอันดับที่มีอยู่หรือใช้ค่าเริ่มต้นตัวอย่างมีดังนี้
object Test { def main(args: Array[String]) { val a:Option[Int] = Some(5) val b:Option[Int] = None println("a.getOrElse(0): " + a.getOrElse(0) ) println("b.getOrElse(10): " + b.getOrElse(10) ) } }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test a.getOrElse(0): 5 b.getOrElse(10): 10
isEmpty () วิธีการ
คุณสามารถใช้ isEmpty () วิธีการตรวจสอบว่าองค์ประกอบ tuple ที่จะไม่มีตัวอย่างดังต่อไปนี้:
object Test { def main(args: Array[String]) { val a:Option[Int] = Some(5) val b:Option[Int] = None println("a.isEmpty: " + a.isEmpty ) println("b.isEmpty: " + b.isEmpty ) } }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test a.isEmpty: false b.isEmpty: true
Scala ตัวเลือกวิธีการทั่วไป
ตารางต่อไปนี้แสดงตัวเลือก Scala วิธีที่นิยมใช้:
เลขที่ | วิธีการและรายละเอียด |
---|---|
1 | def ได้รับ: การ ได้รับค่าตัวเลือก |
2 | def isEmpty: บูลีน ค่าเลือกประเภทการตรวจสอบว่าจะไม่มีนี้เป็นกรณีที่ผลตอบแทนจริงเท็จอย่างอื่น |
3 | productArity def: Int ส่งกลับจำนวนขององค์ประกอบ A (x_1, ... , x_k) กลับ k |
4 | def productElement (N: int): ใด ๆ ได้รับตัวเลือกที่ระบุเริ่มต้นด้วยการเป็นศูนย์ คือ A (x_1, ... , x_k) กลับ x_ (N + 1), 0 <n <K |
5 | def อยู่ (P: (A) => บูลีน): บูลีน ถ้าตัวเลือกไม่ว่าจะเป็นเงื่อนไของค์ประกอบที่ระบุอยู่และไม่ได้ไม่มีผลตอบแทนจริงมิฉะนั้นก็จะส่งกลับเท็จ |
6 | def กรอง (P: (A) => บูลีน): ตัวเลือก [A] Con ถ้าตัวเลือกที่มีค่าและส่งผ่านไปยังกรองผลตอบแทนที่แท้จริงกรองผลตอบแทนบางกรณี มิฉะนั้นค่าส่งกลับคือไม่มี |
7 | def filterNot (P: (A) => บูลีน): ตัวเลือก [A] Con ถ้าตัวเลือกที่มีค่าและส่งผ่านไปยังกรองกลับเท็จกรองผลตอบแทนบางกรณี มิฉะนั้นค่าส่งกลับคือไม่มี |
8 | def flatMap [b] (F: (A) => ตัวเลือก [b]): ตัวเลือก [b] ถ้าตัวเลือกที่มีค่าผ่านไปแล้วฟังก์ชั่น F ผลตอบแทนหลังการรักษามิฉะนั้นก็จะส่งกลับไม่มี |
9 | def foreach [u] (F: (A) => U): หน่วย ถ้าตัวเลือกที่มีค่าแล้วแต่ละค่าส่งผ่านไปยังฟังก์ชัน f หรือไม่ได้รับการรักษา |
10 | def getOrElse [B>: A] (ค่าเริ่มต้น: => B): B ถ้าตัวเลือกที่มีค่าค่าตัวเลือกที่ถูกส่งกลับมิฉะนั้นค่าเริ่มต้นที่กำหนด |
11 | def isDefined: บูลีน ถ้าค่าตัวเลือกเป็นตัวอย่างผลตอบแทนบางอย่างแท้จริงมิฉะนั้นกลับเท็จ |
12 | def iterator: Iterator [A] ถ้าตัวเลือกที่มีค่าซ้ำค่าตัวเลือก ถ้าค่าตัวเลือกว่าง iterator ที่ว่างเปล่าจะถูกส่งกลับ |
13 | def map [b] (F: (A) => B): ตัวเลือก [b] ถ้าตัวเลือกที่มีค่าส่งกลับโดยฟังก์ชั่น F บางคนโพสต์ที่อื่นกลับไม่มี |
14 | def orElse [B>: A] (ทางเลือก: => ตัวเลือก [b]): ตัวเลือก [b] ถ้าตัวเลือกคือไม่มีวิธี orElse ส่งกลับค่าของพารามิเตอร์โดยชื่อมิฉะนั้นก็จะส่งกลับโดยตรงไปยังตัวเลือก |
15 | def orNull ถ้าตัวเลือกที่มีค่าตัวเลือกในการคืนค่ามิฉะนั้นกลับ NULL |