68.scala编程思想笔记——使用Option

68.scala编程思想笔记——使用Option

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50458757
源码下载连接请见第一篇笔记。

有时候方法会产生没有任何意义的结果。这种情况发生时候,方法没有产生错误,也没有任何地方有问题,只是没有答案而已。

         Option的意图就是在此。

         例如如下代码,只对0~1感兴趣,其他值的话不会返回任何信息。

import com.atomicscala.AtomicTest._

 

def banded(input:Double) =

  if(input >1.0 || input < 0.0)

   Left("Nothing")

  else

   Right(math.round(input * 100.0))

 

banded(0.555) is Right(56)

banded(-0.1) is Left("Nothing")

banded(1.1) is Left("Nothing")

修改如下:

import com.atomicscala.AtomicTest._

 

def banded2(input:Double) =

  if(input >1.0 || input < 0.0)

    None

  else

    Some(math.round(input* 100.0))

 

banded2(0.555) is Some(56)

banded2(-0.1) is None

banded2(1.1) is None

 

for(x <- banded2(0.1))

  x is 10

 

val result = for {

  d <-Vector(-0.1, 0.1, 0.3, 0.9, 1.2)

  n <-banded2(d)

} yield n

result is Vector(10, 30, 90)

 如果返回Some和None,那么Scala会推断出Option.

         Option所具有的像容器一样的行为不仅限于推导,还提供了在大多数容器中都可以看到的基本操作集,包括foreach和map,在对None进行操作时它们都可以正确执行。因此,在Option上执行操作时不必检查是Some还是None,只需抽取其中的值。例如:

import com.atomicscala.AtomicTest._

 

def p(s:Option[String])= s.foreach(println)

 

p(Some("Hi")) // Prints "Hi"

p(Option("Hi")) // Prints "Hi"

p(None) // Doesn't do anything!

 

def f(s:Option[String]) = s.map(_ * 2)

 

f(Some("Hi")) is Some("HiHi")

f(None) is None

 

Option(null) is None

         Option并不是有什么选择,实际上没有任何选择,它们要么是某种事物,要么什么都不是。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值