加载中
组合与继承之定义final成员

有时在设计一个继承层级时,你想要确保一个成员不被子类重写。这在Scala中可以和Java一样通过给成员添加final修饰符来实现。例如: object T6 {     def main(args: Array[String]):...

2015/08/20 16:25
103
组合与继承之多态和动态绑定

前面blog中,你可以看到Element类型的变量可以指向ArrayElement类型的对象。这种现象叫做多态。这种情况下,Element对象可以有许多形式(这种类型的多态被称为子类型化多态:subtyping polym...

2015/08/20 11:05
75
组合与继承之使用override修饰符

scala要求,若子类成员所有重写了父类的具体成员则必须带override这个修饰符;若成员实现的是同名的抽象成员时,则这个修饰符是可选的;若成员并未重写或实现什么其他基类(通常我们称为超类...

2015/08/18 16:02
33
组合与继承之调用超类构造器

示例: abstract class Elements {     def contents: Array[String] } class ArrayElement(val contents: Array[String]) extends Elements class LineElement(s: String)...

2015/08/18 15:28
20
组合与继承之定义参数化字段

接上篇blog,上一节中的ArrayElement类的定义。它有一个参数conts,其唯一作用是复制到contents字段中。你可以通过在单一的参数化字段定义中组合参数和字段来避免这种重复,如下所示: abst...

2015/08/18 14:38
20
组合与继承之重写方法和字段

接上篇blog,scala里的字段和方法属于相同的命名空间,这让字段可以重写无参数方法。例如,你可以通过改变ArrayElement类中contents的实现将其从一个方法变为一个字段,而无需修改类Element...

2015/08/18 11:02
121
组合与继承之扩展类

接上篇blog,为了实例化一个元素,我们需要创建一个扩展了Element类并实现抽象的contents方法的子类。可能的方式之一: class ArrayElement(conts: Array[String]) extends Elements {...

2015/08/17 23:56
65
组合与继承之定义无参数方法

接着上篇blog的例子,我们将向Element添加显示宽度和高度的方法。如下例所示:height方法返回contents里的行数。width方法返回第一行的长度,如果元素没有行则返回零。 package scala abst...

2014/06/25 22:25
106
组合与继承之抽象类

我们将建立一个创建和渲染二维布局元素的库作为本章运行的实现。在通过简单部件及组合操作符的帮助下构建对象的系统中,布局元素是个不错的例子。本章里,我们将定义类使得元素对象能够由简单...

2014/06/24 20:39
99
控制抽象之传名参数

我们来看这个例子: package scala object ScalaTest3 {     def main(args : Array[String]) : Unit = {         runInThread(()=>println("Hi"))         ...

2014/06/16 22:57
117
抽象控制之编写新的控制结构

在拥有头等函数的语言中,即使语言的语法是固定的,你也可以有效地制作新的控制结构。所以你需要做的就是创建带函数做参数的方法。例如,下面是“双倍”控制结构,能够重复一个操作两次并返回...

2014/06/16 20:41
69
控制抽象之柯里化(currying)

前面说过scala允许你创建新的“感觉像是原生语言支持”的控制抽象。尽管到目前你已经看到的例子都的确是控制抽象,不过没有人会误以为他们是原生语言支持的。为了搞明白如何让控制抽象感觉更...

2014/06/10 22:16
310
控制抽象之简化客户代码

前一个例子演示了高阶函数能在你实现API的同时,帮助减少代码重复。高阶函数的另一个重要应用是把它们放在API里使客户代码更简洁。scala的集合类型的特定用途循环方法(这些特殊目的的循环方...

2014/06/10 21:57
57
控制抽象之减少代码重复

scala没有太多的内建控制抽象,因为它提供给你的了创建自己的控制抽象的能力。前面已经学习了函数值,后面我们会展示给你如何把函数值应用到创建的控制抽象。首先来看看如何减少代码重复。 ...

2014/06/09 16:56
206
函数和闭包之尾递归

前面提到过,如果想把更新var的while循环转换成仅使用val这种更函数式的风格的话,有时候你可以使用递归。下面的例子是通过不断改善猜测数字来逼近一个值的递归函数: def approximate(gue...

2014/06/08 15:53
298
函数和闭包之重复参数

scala中,你可以指明函数的最后一个参数是重复的。从而允许客户向函数传入可变长度参数列表。想要标注一个重复参数,可在参数的类型之后放一个星号(*)。例如: 这样定义,echo可以被零个至...

2014/06/08 14:36
65
函数和闭包之闭包

到这里为止,所有函数字面量的例子仅使用了传入的参数。例如:(x:Int) => x > 0里,函数体x > 0用到的唯一变量x被定义为函数参数。然而也可以参考定义在其他地方的变量,如: (x:Int) => x...

2014/06/08 11:48
252
函数和闭包之偏应用函数

偏应用函数(Partial Applied Function)的定义:偏应用函数就是缺少部分或全部参数的函数。 尽管前面的例子里下划线(_)替代的只是单个参数,但你还可以使用单个下划线替换整个参数列表。再...

2014/06/08 11:11
242
函数和闭包之占位符语法

如果想让函数字面量更简洁,可以把下划线(_)当做一个参数的占位符(或者更多个参数的占位符,更多个的例子,我们在下一节中会讲到),每个参数在函数字面量内会出现一次且仅会出现一次(解...

2014/06/07 23:06
282
函数和闭包之函数字面量的短格式

Scala提供了许多方法去除冗余信息并把函数字面量写得更简短。注意留意这些东西,因为它们能让你去掉代码里乱七八糟的东西。一种让函数字面量更简短的方式是去除参数类型。因此,前一节带过滤...

2014/06/07 22:16
75

没有更多内容

加载失败,请刷新页面

返回顶部
顶部