在scala中这四个类型名称很类似,作用确实完全不同的。

None是一个object,是Option的子类型,定义如下

case object None extends Option[Nothing] {def isEmpty = truedef get = throw new NoSuchElementException("None.get")
}

scala推荐在可能返回空的方法使用Option[X]作为返回类型。如果有值就返回Some[x](Some也是Option的子类),否则返回None,例如

def get(key: A): Option[B] = {if (contains(key))Some(getValue(key))elseNone
}

获得Option后,可以使用get获得包含的值,或者使用getOrElse获得默认值如果isEmpty为true。

Null是所有AnyRef的子类,在scala的类型系统中,AnyRef是Any的子类,同时Any子类的还有AnyVal。对应java值类型的所有类型都是AnyVal的子类。所以Null可以赋值给所有的引用类型(AnyRef),不能赋值给值类型,这个java的语义是相同的。 null是Null的唯一对象。

Nothing是所有类型的子类,也是Null的子类。Nothing没有对象,但是可以用来定义类型。例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(虽然不会返回)

def get(index:Int):Int = {if(x < 0) throw new Exception(...)else ....
}

if语句是表达式,有返回值,必然有返回值类型,如果x < 0,抛出异常,返回值的类型为Nothing,Nothing也是Int的子类,所以,if表达式的返回类型为Int,get方法的返回值类型也为Int。

Nil是一个空的List,定义为List[Nothing],根据List的定义List[+A],所有Nil是所有List[T]的子类。

转载于:https://www.cnblogs.com/bluejoe/p/5116014.html

Scala中的None,Nothing,Null,Nil相关推荐

  1. Scala中Unit 类型、Null 类型和 Nothing 类型

  2. scala中使用Option、Some、None,避免使用null

    避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是"无",在Java,它是null.在Java 里,null 是一个关键字,不是一个对象,所以对它调用任 ...

  3. Scala中如何优雅的处理Null

    前言 如果在scala代码还在使用id! = null,可能会被有的人嘲笑,都什么年代了,竟然还有这样的写法,NullPointerException见少了吧? 不过,据统计: Spark 源代码使用 ...

  4. Scala中Unit、Nothing和Null之间的区别概述

    在Scala中,Unit.Nothing和Null是三个比较特殊的数据类型,三者之间的区别如下: Unit 类似于Java中的void,表示没有返回值,用于不返回任何结果的方法的结果类型. 只有一个实 ...

  5. Scala 中的函数式编程基础

    主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. ...

  6. 【Scala】Scala中的模式匹配、类型参数与隐式转换

    1.模式匹配 (1)概述 模式匹配是Scala中非常有特色,非常强大的一种功能.模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理.但 ...

  7. Scala系列-4、scala中特质、柯里化、闭包等

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 传送门:大数据系列文章目录 目录 scala中特质 特质作为接口使用 特质中放置非抽象的成员 ...

  8. Akka 系列(五):Java 和 Scala 中的 Future

    随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue,带你走入异步编程的 ...

  9. scala 中List的简单使用

    /*** scala 中List的使用**/object ListUse {def main(args: Array[String]): Unit = {def decorator(l:List[In ...

最新文章

  1. H5调用Android播放视频
  2. 数据分析基础教程Numpy指南笔记
  3. 数据库的内连接和外连接区别?
  4. SecureCRT更改 rz上传/sz下载的默认路径
  5. python进程池调用实例方法_Python进程池Pool应用实例分析
  6. DeepLearning:tensorflow 参数初始化和参数保存
  7. 点击延迟_300ms 延迟是什么,如何解决
  8. python3精要(6)-string类的format()方法
  9. 趣学python3(7)-循环语句(1)
  10. Hbase(2)——基础语句(2)
  11. android poi读写,Android-android中怎样使用poi
  12. word2vec的理解
  13. Kicad快捷键大全
  14. Elastic Search + Logstash + Kibana 初学者日志
  15. iptables与Netfilter概念
  16. 福师计算机在线作业在每个w,16春季福师《计算机应用基础》在线作业二
  17. 基于multisim的fm调制解调_基于Multisim的AM调制解调电路设计与研究
  18. 关闭WIN7休眠功能
  19. opencv去除图片黑边,黑色背景
  20. 任务队列:celery快速入门及django中celery的用法

热门文章

  1. c++笔记(10) 文件输入输出
  2. Kruskal算法 最小生成树
  3. Python——生成一个大文件ips.txt,要求1200行 ,每行随机为172.25.254.0/24段的ip(京东二面笔试题)
  4. python批量裁剪矢量数据_ARCGIS\python批量裁剪栅格数据
  5. 日益努力而后风生水起,送3本技术好书
  6. Graph Embedding图嵌入
  7. Reef Finance与Manta Network就流动性解决方案达成合作
  8. SAP License:SAP如何区分固定成本和变动成本
  9. 使用 Spark ML Pipeline 进行机器学习
  10. Building a Console Application on Windows Mobile