简单接触Scala底层类型

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

编辑推荐: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的定义工厂对象

标题名称:简单接触Scala底层类型
链接分享:http://www.shufengxianlan.com/qtweb/news30/325980.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联