简单接触Scala底层类型
创始人
2024-04-19 05:50:27
0

在图释11.1类型层级的底部你看到了两个类scala.Null和Scala.Nothing。它们是用统一的方式处理某些Scala的面向对象类型系统的“边界情况”的特殊类型。

51CTO编辑推荐:Scala编程语言专题

类Null是null类型的引用;它是每个引用类(就是说,每个继承自AnyRef的类)的子类。Null不兼容值类型。你不可,比方说,把null值赋给整数变量:

  1. scala>val i: Int = null 
  2. < console>:4:error:typemismatch;  
  3. found:Null(null)  
  4. required:Int  
类型Nothing在Scala的类层级的***端;它是任何其它类型的子类型。然而,根本没有这个类型的任何值。要一个没有值的类型有什么意思呢?7.4节中讨论过,Nothing的一个用处是它标明了不正常的终止。例如Scala的标准库中的Predef对象有一个error方法,如下定义:

  1. def error(message:String): Nothing = throw new RuntimeException(message)  
error的返回类型是Nothing,告诉用户方法不是正常返回的(代之以抛出了异常)。因为Nothing是任何其它类型的子类,你可以非常灵活的使用像error这样的方法。例如:

  1. def divide(x:Int, y:Int): Int =  
  2.  if(y != 0) x / y  
  3.  else error("can't divide by zero")  

“那么”状态分支,x / y,类型为Int,而“否则”(else)分支,调用了error,类型为Nothing。因为Nothing是Int的子类型,整个状态语句的类型是Int,正如需要的那样。

【相关阅读】

  1. Scala的原始类型是如何实现的
  2. Scala的类层级
  3. Scala中的Spiral程序:把代码都螺旋在一起
  4. Scala中变高变宽的实现:heighten和widen
  5. 学习Scala的定义工厂对象

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...