怎么深入掌握Option, Some, 和 None?
alanwu
2009-10-12
我知道Some和None都是Option的子类,None定义为case object,也就是说在实际使用中就是对象而不是类,更像null。
看到过很多使用Option,Some,和None的例子,但我想知道如何深入掌握。 |
|
night_stalker
2009-10-12
Option 来源于 Maybe Monad,和可 null 对象的区别在于可以链式操作。
譬如使用可 null 对象往往要判断是否 null,写起来容易出错, 很多空指针异常的问题往往就出在这个判断不完全上面: if(a != null && a.b != null) a.b.c else 100 为了效率往往还得写成 if(a != null) { val tmp = a.b if(tmp != null) tmp.c else 100 } else 100 上面两种写法虽不长,但一不小心就会弄错。而使用 Option 就可以: a map (_.b) map (_.c) getOrElse 100 一定程度上保障了代码安全性。 Maybe Monad 讲起来就有点费解了 …… 没兴趣可无视。 模式匹配也为 Option 提供了便利,就算你忘了 get 函数, 还可以用下面的代码获取箱中的内容: oa match { case Some(a) => ... case None => ... } |
|
RednaxelaFX
2009-10-13
说起Maybe,想起之前Matthew Podwysocki写的一篇:Much Ado About Monads – Maybe Edition。虽然不是用Scala来讲解,概念都一样,看看无妨
|
|
alanwu
2009-10-13
Great! Thank you!
我再消化一下整理一下 |