为了账号安全,请及时绑定邮箱和手机立即绑定

Scala Option[T]的通俗理解

标签:
大数据

在Scala里Option[T]实际上是一个容器,就像数组或是List一样,你可以把他看成是一个可能有零到一个元素的List。

Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。

Option[T] 其实就像一个中转站一样:从某一个地方传递过来了一个值,这个值我用Some()包裹了起来,等待别人来拿。但是当有对象来取值时,发现并没有这个值,这时候中转站Option[T]就会给它一个None。如果有就给它用Some()包裹好的值。

接下来了解一下Option[T]当中的方法,就知道了这个中转站是怎样工作的了!!!

get() 方法:

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一个是一个Key的类型是String,Value的类型是String的hash map,但不一样的是他的get()返回的是一个叫Option[String]的类别。

  • Scala 使用 Option[String] 来告诉你:我会想办法回传一个 String,但也可能没有 String 给你。

  • Scala 使用 Option[String] 来告诉你:「我会想办法回传一个 String,但也可能没有 String 给你」。

  • Option有两个子类别,一个是Some,一个是None,当他回传Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过get()这个函数拿到那个 String,如果他返回的是None,则代表没有字符串可以给你。

由于这样的特性,所以就可以应用到模式匹配当中,来输出匹配值:

object Test {   def main(args: Array[String]) {
      val sites = Map("runoob" -> "www.runoob.com", "google" -> "www.google.com")
      
      println("show(sites.get( \"runoob\")) : " +  
                                          show(sites.get( "runoob")) )
      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( "runoob")) : www.runoob.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): 5b.getOrElse(10): 10

isEmpty() 方法:

  • 可以使用 isEmpty() 方法来检测元组中的元素是否为 None

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: falseb.isEmpty: true



作者:他与理想国
链接:https://www.jianshu.com/p/05ac5ba6bf00


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消