Scala讲座:混入多重继承、类型层次和集合

发表于:2011-8-30 09:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:fineqtbull    来源:51Testing软件测试网采编

  请读者如果想起Scala是怎样的强类型和静态化语言的话,那么就能够明白通过特征来加入新功能的特

  点给他带来了多大的灵活性。

  Scala的类型体系(基本类型)

  Scala中可使用的基本数据都以类的形式被定义了,所以基本类型与用户定义类型可以认为是没有区别的。虽然这么说,Scala还是提供了与Java的数据类型相对应的类定义群(图 4-1)。这绝不是包装类,在编译后他们将被映射为Java的字节码,所以性能上是绝对没有问题的。

图 4-1与Scala基本类型相对应的类群

  如下例程序所示,对于整数对象7可以响应各种消息(方法)。既可以执行toString方法来转换成字符串,又可以使用to这个执行Int => Range的方法。附带说一下,7 to 20相当于7.to(20),该方法的执行结果是Range(7,8, 9, … 19, 20)。对于该范围对象适用了foreach( (i)=>print(i) ),print _则与一个参数的匿名函数(i) => print(i)相当。

  1. scala> 7.toString  
  2. res2: java.lang.String = 7 
  3. scala> 7 to 20 foreach( print _ )  
  4. 7891011121314151617181920

  实际上,Scala在编译器自动引入的Predef单例对象中定义了为了兼容Java基础类型所存在的类型别名。例如boolean, char, byte, short, int, long, float, double被定义了,这些别名实际上是引用了Scala.Boolean,Scala.Char,Scala.Byte等Scala的类。可能的话,为了提高“Scala中说所有数据都是对象”这种意识,建议尽量一开始就使用Int、Boolean、Float等原来的类名。

  不过,在Scala种并没有类型转换操作符,而是在所有类的基类Any中定义了具有同等功能的方法asInstanceOf[X]。用这方法就可以把类型转换为X了。Any类中同时还定义了相当于instanceof操作符的isInstanceOf[X]方法。

图 4-2Scala类层次的基本结构

  特别是该类层次中Iterable下的集类型在函数式编程中大显身手。其中的可变(mutable)与非可变(immutable)两大系列的类层次基本上呈现出镜像关系,可以充分发挥出函数式语言功能的当然就是非可变集类型群了。

  结束语

  这一讲以迷你旅行的形式说明了一下Scala语法的特点,函数定义和函数式编程就卖个关子放到下一讲去吧。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号