Scala学习笔记(7)-函数式对象

Java类具备能够带参数的构造器,而Scala类能够直接带参数。Scala的写法更简洁——类参数能够直接在类的主体中使用;不必定义字段而后写赋值函数把构造器的参数复制到字段里。这能够潜在地节省不少固定写法,尤为是对小类来讲。 ide

Scala编译器将把你放在类内部的任何不是字段的部分或者方法定义的代码,编译进主构造器。例如,你能够像这样打印输出一条除错消息: 函数

class Rational(n: Int, d: Int) {
    println("Created "+n+"/"+d)
}

根据这个代码,Scala编译器将把println调用放在Rational的主构造器。所以,println调用将在每次建立一个新的Rational实例时打印这条除错信息。 ui

使用require方法对参数进行先决条件检测 this

class Rational(n: Int, d: Int) {
    require(d != 0)
    override def toString = n +"/"+ d
}

require方法带一个布尔型参数。若是传入的值为真,require将正常返回。反之,require将经过抛出IllegalArgumentException来阻止对象被构造。 scala

从构造器,Scala的从构造器开始于def this(...)。每个从构造器的第一个动做都是调用同一个类里面其余的构造器。换句话说就是,每一个Scala类里的每一个从构造器都是以“this(...)”形式开头的。 设计

若你熟悉Java,你或许会奇怪为何Scala构造器的规矩比Java的还要大。Java里,构造器的第一个动做必需要么调用同类里的另外一个构造器,要么直接调用超类的构造器。Scala的类里面,只有主构造器能够调用超类的构造器。Scala里更严格的限制其实是权衡了更高的简洁度和与Java构造器相比的简易性所付出的代价以后做出的设计。 code

相关文章
相关标签/搜索