Scala教程之:Option-Some-None
生活随笔
收集整理的這篇文章主要介紹了
Scala教程之:Option-Some-None
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- Option和Some
- Option和None
- Option和模式匹配
在java 8中,為了避免NullPointerException,引入了Option,在Scala中也有同樣的用法。他們就是Option, Some 和None.
其中Option是一個抽象類。
sealed abstract class Option[+A] extends Product with Serializable我們看下Some和None的定義:
final case class Some[+A](@deprecatedName('x, "2.12.0") value: A) extends Option[A] {def isEmpty = falsedef get = value@deprecated("Use .value instead.", "2.12.0") def x: A = value }/** This case object represents non-existent values.** @author Martin Odersky* @since 1.0*/ @SerialVersionUID(5066590221178148012L) // value computed by serialver for 2.11.2, annotation added in 2.11.4 case object None extends Option[Nothing] {def isEmpty = truedef get = throw new NoSuchElementException("None.get") }可以看到Some是一個繼承了Option的case class。 而None是一個繼承了Option[Nothing]的case object。
我們看下在程序中該怎么使用他們。
Option和Some
println("Step 1: How to use Option and Some - a basic example")val glazedDonutTaste: Option[String] = Some("Very Tasty")println(s"Glazed Donut taste = ${glazedDonutTaste.get}")上面的例子中,我們定義了一個類型為String的Option,然后用Some給它賦了一個值。接下來我們調用Option的get方法來獲取這個String值。
下面是運行的結果:
Step 1: How to use Option and Some - a basic example Glazed Donut taste = Very Tasty這里直接調用get會有問題,就是get出來的結果也可能是空的,這樣就不能避免NullPointerException的問題。
Option和None
下面我們看下None的用法:
println("\nStep 2: How to use Option and None - a basic example") val glazedDonutName: Option[String] = None println(s"Glazed Donut name = ${glazedDonutName.getOrElse("Glazed Donut")}")上面我們定義了一個Option,并給給他賦值None。在獲取值的時候,我們沒有調用get方法,相反我們使用的是getOrElse,如果值為空,則給他一個默認值。 下面是輸出結果:
Step 2: How to use Option and None - a basic example Glazed Donut name = Glazed Donut注意, None沒有get方法, 如果你像第一個例子一樣調用的話,會報錯:java.util.NoSuchElementException: None.get。
Option和模式匹配
上面的例子中我們使用了getOrElse來獲取值,還有一種方法叫做模式匹配:
println("\nStep 3: How to use Pattern Matching with Option") glazedDonutName match {case Some(name) => println(s"Received donut name = $name")case None => println(s"No donut name was found!")這樣我們不管Option里面到底有沒有值,都可以完成匹配。下面是輸出的結果。
Step 3: How to use Pattern Matching with Option No donut name was found!更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考 flydean的博客
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Scala教程之:Option-Some-None的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scala教程之:scala的参数
- 下一篇: Scala教程之:Enumeration