Latest web development tutorials

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

คอลเลกชันสกาล่า คอลเลกชันสกาล่า