• 转载 | 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
    
  • 相关阅读:
    MongoDB ObjectId
    MongoDB固定集合
    MongoDB 正则表达式
    MongoDB Map Reduce
    MongoDB操作
    VIM跳到指定行
    linux之echo命令
    rpm and yum commands
    CentOS 7 下的软件安装建议
    apt系统中sources.list文件的解析
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/14743722.html
Copyright © 2020-2023  润新知