zoukankan      html  css  js  c++  java
  • 转载 | Scala 如何避免使用 Null

      在 Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。

    Scala 的 Option类型

      Scala在变量和函数返回值可能不会引用任何值的时候使用 Option 类型。在没有值的时候,使用 None,这是 Option 的一个子类。如果有值可以引用,就使用 Some 来包含这个值。Some 也是 Option 的子类。 None 被声明为一个对象,而不是一个类,因为我们只需要它的一个实例。这样,它多少有点像 null 关键字,但它却是一个实实在在的,有方法的对象。

    scala> val mapDs = Map(5->"five", 6->"six", 10->"ten")
    mapDs: scala.collection.immutable.Map[Int,String] = Map(5 -> five, 6 -> six, 10 -> ten)
    
    scala> mapDs get 5
    res2: Option[String] = Some(five)
    
    scala> mapDs get 7
    res3: Option[String] = None
    
    scala>

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

    在返回 None,也就是没有 String 给你的时候,如果你还硬要调用 get() 来取得 String 的话,Scala 一样是会抛出一个 NoSuchElementException 异常给你的。

    scala> val mapMixd = Map(5->"five", 6->"six", 10->"ten", "value"->77, 2->10)
    mapMixd: scala.collection.immutable.Map[Any,Any] = Map(5 -> five, 10 -> ten, 6 -> six, 2 -> 10, value -> 77)
    
    scala> mapMixd get 2
    res5: Option[Any] = Some(10)
    
    scala> mapMixd get 4
    res6: Option[Any] = None
    

    这时就用到另外一个方法 getOrElse。这个方法在这个 Option 是 Some 的实例时返回对应的值,而在是 None 的实例时返回传入的参数。换句话说,传入 getOrElse 的参数实际上是默认返回值。

    scala> mapMixd get 4 getOrElse "no value"
    res7: Any = no value
    
    scala> mapMixd get 2 getOrElse "no value"
    res8: Any = 10
    部分参考自  https://www.jianshu.com/p/95896d06a94d
    
  • 相关阅读:
    392 单页面应用程序概述
    391 vue $refs:vue获取组件、DOM元素
    使用这些 CSS 属性选择器来提高前端开发效率!
    WEB网站常见受攻击方式及解决办法
    能用HTML/CSS解决的问题就不要使用JS
    两张图解释CSS动画的性能
    20个编写现代CSS代码的建议
    微信小程序之下载(下载文件tempFilePath后缀unknown)
    使用typescript构建Vue应用
    Vue模板语法、事件和表单使用
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/14743722.html
Copyright © 2011-2022 走看看