关于scala 中的option集合

Option集合

  • Option集合为1元集合,表示类型为一个值的存在或者不存在。

  • 其中包含了两个子类型:Some和None

  • Some是一个类型参数化的单元素集合,None是一个空集合。None类型没有类型参数,因为它永远不包含任何内容。

  • 下面用非NULL和NULL来创建一个Option:

var x:String ="Indeed"
var a=Option(x)
x =null
var b=Option(x)
  • 使用isEmpty来判定一个一元的Option集合是否是空的,true表示为空的,false表示为非空
a.isEmpty
b.isEmpty
  • 例子:
def divide(amt:Double,divisor:Double) :Option[Double]={
    if(divisor ==0 ) None
    else Option(amt/divisor) 
    
}

val legit =divide(5,2)
val illegit = divide(3,0)

从Option抽取值

  • 一种不安全的操作,get()方法。如果对一个实际上是Some实例的Option调用这个方法,可以成功的接收到其中包含的值。不过如果对一个None实例调用get(),就会触发一个“没有这样的元素的”报错
  • 使用匹配表达式
nextOption match {
    case Some(x) => x;
    case None => -1}
    
}

  • 使用匹配表达式的方式等同于使用函数getOrElse函数,直接返回Option集合中的值,如果值为空,则返回None

getOrElse函数返回case类的问题

  • 先看一段代码
case class Address (city:String,state:String ,zip:String)

case class person (var username:String,var passwd:String) {
    var age=0
    var firstname=""
    var lastname=""
    var address =None:Option[Address]
}

val p = person("shan","secret")
p.address=Some(Address("guangzhou","guangdong","x"))
  • 现在想从p.address取出值来,考虑到p.address为一个Option类,使用get或者getOrElse(),get函数可能会非常的不安全,如果Option集合为None,则返回一个错误。
p.address.get
//返回值为正常的

//使用匹配表达式来进行值的提取

p.address.getOrElse() match {
    case Address(x,y,z) => x
}

总结

  • 对于Option集合,最好的取值方式就是使用匹配表达式

你可能感兴趣的:(关于scala 中的option集合)