Scala 包对象

浏览: 2456 2018年06月04日
到目前为止,我们看到的添加到包的都是类型,Trait和单例对象(Object)。这些都是指包的定级层次定义的类型。Scala的定级层次除了可以定义类,Trait,Object之外,其它可以在类,Trait,Object内部定义的类型,也都可以直接定义在包中,比如一些通用的函数,变量,你都可以直接...

Scala 为访问控制修饰符添加作用域

浏览: 2390 2018年05月29日
Scala的访问修饰符可以添加作用域参数。作用域的语法如下:private[x]或protected[x]其中x代表某个包,类或者对象,表示可以访问这个Private或的protected的范围直到X。通过为访问修饰符添加作用域参数,可以非常精确的控制所定义的类型能够被其它类型访问的范围。尤其是...

Scala 访问控制修饰符

浏览: 2367 2018年05月15日
包的成员,类或对象可以使用访问控制修饰符,比如private和protected来修饰,通过这些修饰符可以控制其他部分对这些类,对象的访问。Scala和访问控制大体上和Java类似,但也有些重要的不同,本篇将介绍这些。私有成员Scala的私有成员和Java类似,一个使用private修饰过的类或...

Scala 隐含的import

浏览: 2867 2018年04月29日
Scala缺省为每个文件添加如下几个package. 这几个包无需明确指明。import java.lang._ //everything in the java.lang packageimport scala._ //everything in the scala packa...

Scala 使用import

浏览: 2502 2018年04月26日
和Java一样,Scala也是通过import语句引用其它包中定义的类型,类型引入后,可以使用短名称来引用该类型而无需使用全路径。要注意的Scala使用“_” 而非”*”作为通配符。//easy access to Fruitimport bobsdelights.Fruit//easy acc...

Scala 引用包中的代码

浏览: 2606 2018年04月25日
当我们把代码以层次关系放到包中时,它不仅仅可以帮助人们浏览代码,同时也说明了同一包中的代码具有某些相关性。Scala可以利用这些相关性来简化代码引用,比较使用短名称,而无需使用包的全路径来访问类定义。下面我们给出三个简单的例子:package bobsrockets{ package navi...

Scala 使用Package–将代码放入包中

浏览: 2780 2018年04月23日
软件开发过程减小程序之间的“耦合性”至关重要,降低耦合性的一个方法是模块化,Scala提供和Java类似的分包机制,但又稍有不同,因此即使你了解Java语言,还是建议您阅读本篇和后续几篇介绍Scala的Package和Import的文章。我们之前的例子,没有明确使用package,因此它们存在于...

Scala Trait用来实现可叠加的修改操作

浏览: 2871 2018年04月19日
我们已经看到Trait的一个主要用法,将一个瘦接口变成胖接口,本篇我们介绍Trait的另外一个重要用法,为类添加一些可以叠加的修改操作。Trait能够修改类的方法,并且能够通过叠加这些操作(不同组合)修改类的方法。我们来看这样一个例子,修改一个整数队列,这个队列有两个方法:put 为队列添加一个...

Scala Ordered Trait

浏览: 2784 2018年04月17日
比较对象也是胖接口来的比较方便的一个应用领域,当你需要比较两个有顺序关系的对象时,如果只需要一个方法就可以知道需要比较的结果就非常便利。比如,你需要“小于”关系,你希望使用“< “比较就可以了,如果是“小于等于”,使用”<=”就可以。如果使用瘦接口来定义类,也许你只定义了一个<比较方法,那么如果...

Scala Trait示例–Rectangular 对象

浏览: 2788 2018年04月14日
在设计绘图程序库时常常需要定义一些具有矩形形状的类型:比如窗口,bitmap图像,矩形选取框等。为了方便使用这些矩形对象,函数库对象类提供了查询对象宽度和长度的方法(比如width,height)和坐标的left,right,top和bottom等方法。然而在实现这些函数库的这样方法,如果使用J...

Scala 选择瘦接口还是胖接口设计

浏览: 2542 2018年04月13日
Trait的一种主要应用方式是可以根据类已有的方法自动为类添加方法。也就是说,Trait可以使得一个瘦接口变得丰满些,把它变成胖接口。选择瘦接口还是胖接口的体现了面向对象设计中常会面临的在实现者与接口用户之间的权衡。胖接口有更多的方法,对于调用者来说更便捷。客户可以捡一个完全符合他们功能需要的方...

Trait的基本概念

浏览: 2524 2018年04月12日
在Scala中Trait为重用代码的一个基本单位。一个Traits封装了方法和变量,和Interface相比,它的方法可以有实现,这一点有点和抽象类定义类似。但和类继承不同的是,Scala中类继承为单一继承,也就是说子类只能有一个父类。当一个类可以和多个Trait混合,这些Trait定义的成员变...

所有类的公共子类–底层类型

浏览: 2783 2018年04月11日
前面我们给出了Scala的类的一个关系图:在这张图的最下方我们可以看到有两个类,scala.Null和scala.Nothing. 这两个类的作用是Scala支持统一方式用来处理面向对象的一些边角情况。因为它们在类层次图的下方,因此也称为底层类型类Null代表null引用,它是所有引用类(每个由...

Scala基本数据类型的实现方法

浏览: 2945 2018年04月10日
Scala的基本数据类型是如何实现的?实际上,Scala以与Java同样的方式存储整数:把它当作32位的字类型。这对于有效使用JVM平台和与Java库的互操作性方面来说都很重要,。标准的操作如加法或乘法都被实现为数据类型基本运算操作。然而,当整数需要被当作(Java)对象看待的时候,Scala使...

Scala的类层次关系

浏览: 2799 2018年04月10日
前面我们介绍了Scala的类的继承,本篇我们介绍Scala语言自身定义的类的层次关系,在Scala中,所有的类都有一个公共的基类称为Any,此外还定义了所有类的子类Nothing,下面的图给出的Scala定义的类层次关系的一个概要:由于所有的类都继承自Any,因此Scala中的对象都可以使用==...

Scala 组合和继承–小结

浏览: 3103 2018年04月08日
前面我们基本完成了布局元素的函数库,现在我们就可以写个程序来使用这个函数库,下面显示螺旋线的程序如下:object Spiral { val space = elem (" ") val corner = elem ("+") def spiral(nEdges:Int, directio...

Scala 组合和继承–定义heighten和widen函数

浏览: 2956 2018年04月05日
我们还需要最后一个改进,之前的Element实现不够完善,只支持同样高度和同样宽度的Element使用above和beside函数,比如下面的代码将无法正常工作,因为组合元素的第二行比第一行要长:new ArrayElement(Array("hello")) above new ArrayEl...

Scala 组合和继承–定义factory对象

浏览: 2857 2018年04月02日
到目前为止,我们定义了关于布局元素类的一个层次结构。你可以把包含这个层次关系的类作为API接口提供给其它应用,但有时你可以希望对函数库的用户隐藏这种层次关系,这通常可以使用factory(构造工厂)对象来实现。一个factory对象定义了用来构造其它对象的函数。库函数的用户可以通过工厂对象来构造...

Scala 组合和继承–实现类Element的above,beside和toString()方法

浏览: 2255 2018年03月29日
们接着实现类Element的其它方法,如above, beside和toString方法。above方法,意味着把一个布局元素放在另外一个布局元素的上方,也就是把这两个元素的contents的内容连接起来。我们首先实现above函数的第一个版本:def above(that: Element) ...

Scala 组合和继承–使用组合还是继承?

浏览: 2607 2018年03月27日
前面我们说过,构建新类的两个基本方法是组合和继承,如果你的主要目的是代码重用,那么最好使用组合的方法构造新类,使用继承的方法构造新类造成的可能问题是,无意的修改基类可能会破坏子类的实现。关于继承关系你可以问自己一个问题,是否它建模了一个is-a关系。例如,说ArrayElement是Elemen...