【Scala】Scala-Option-Null的蹊跷】的更多相关文章

刚接触Scala时就很奇怪, 为什么Java已经有null了,却偏偏还要弄出个None 后来依然我行我素在Scala里使用null, 结果就是经常被NullPointerException折磨得阴魂不散...于是终于领悟. WHY? 举个例子: 假设有一个简单的对象A, A类里有2个Int属性, a和b case class A(val a : Int, val b : Int) 然后有这么一个map val map1 = Map(1 -> A(111, 1111), 2 -> A(222,…
Scala的Option类型 为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型.在没有值的时候,使用None,这是Option的一个子类.如果有值可以引用,就使用Some来包含这个值.Some也是Option的子类.None被声明为一个对象,而不是一个类,因为我们只需要它的一个实例.这样,它多少有点像null关键字,但它却是一个实实在在的,有方法的对象. 单独对一个map对象使用get方法,获取到的是…
转载:http://www.jianshu.com/p/95896d06a94d 1.option类型避免对象是空值,造成空指针异常. 2.None对象表示null,在没有对象返回时使用,some在有对象值时使用. 避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null.在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的.但是这对语言设计者来说是一件令人疑惑的选择.为什么要在程序员希望返回一个对象的时候返回…
Alternatives Use null as a last resort. As already mentioned, Option replaces most usages of null. If you using null to implement deferred initialisation of a field with some expensive calculation, you should use a lazy val. Canonical initialisation…
当一个函数既要返回对象,又要返回null的时候,使用Option[] http://www.runoob.com/scala/scala-options.html Option是scala的选项,用来表示一个键是可选的(有值或者无值),比如判断一个map是否有值,可以直接使用get(xxx) ,返回的就是Option[String] Option[]有两个衍生值,一个是Some[],一个是None final case class Some[+A](x: A) extends Option[A]…
一般来说,对于每种语言都会有一个关键字来表示一个对象引用的“无”.在Java中使用的是null. 而Scala则融合了函数式编程的风格,当预计到变量或者函数返回值可能不会引用任何值的时候,使用Option类型. Option(选项)类型用来表示一个值.(有值或无值). Option[T] 是一个类型为 T 的一个可选值的容器. Option类包含一个子类Some,当存在可以被引用的值的时候,也就是有值,就可以使用Some来包含这个值.例如Some("Hadoop") Option类还包…
Option的解释: Represents optional values. Instances of Option are either an instance of scala.Some or the object None. Option[A] (sealed trait) 有两个取值:     1. Some[A] 有类型A的值     2. None 没有值 Option一般有两种用法:     1. 模式匹配 Option[A] option option match { case…
Option类型本身没有实现,而是依赖两个子类型提供具体实习那:Some和None.Some是iyge类型参数化的单元素集合,None是一个空集合. ----<scala学习手册>P119…
欢迎关注我的新博客地址:http://cuipengfei.me/blog/2014/08/30/options-for/ Scala里的forkeyword是个非常有趣的东西. 能够用来把多层嵌套for循环写成一层.比方这样: 1 for(i<-1 to 10;j<-1 to 10;k<-1 to 10) yield(s"$i $j $k") 这行代码运行的结果是这种: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19…
1. 构造映射 可以使用如下命令构造一个映射: scala> val scores = Map("Alice" -> 90, "Kim" -> 89, "Bob"-> 98) scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 90, Kim -> 89, Bob -> 98) 上面构造了一个不可变的Map[String, I…