def add(b:Byte):Unit={ b=1 //编译无法通过,由于b为val值 } |
class ChecksumAccumulator{ private var sum=0 def add(b:Byte):Unit={ sum+=b } def checksum():Int={ return ~(sum&0xff)+1 } } 可以简化: class ChecksumAccumulator{ private var sum=0 def add(b:Byte):Unit=sum+=b def checksum():Int=~(sum&0xff)+1}对于add这样的结果类型为Unit的方法来说,执行的目的是为了他的副作用,此时可以去掉结果类型及等号,将方法体放在{}中,此时方法看上去就很向过程。 def add(b:Byte) {sum+=b} 需要注意的是,如果去掉{}前卖弄的“=”,则方法的结果类型一定是Unit,此时无论方法体两面是什么都是成立的。因此有返回值的时候一定不要忘记“=” |
class Rational(n:Int,d:Int) 其中n和d成为类参数。如果类没有主体就不需要指定一对{}Scala的主构造器:Scala在类定义的时候就定义了类的主构造器Scala编译器会将类的内容既不是字段也不是方法定义的代码编译至主构造器中。Scala中的先决条件: required(condition) required方法带一个boolean类型的参数,若为真,将正常返回,否则会抛出IllegalArgumentException阻止对象被构造。从构造器: Scala的辅助构造函数定义一般开始于def this() ,函数主体完全是主构造器的调用。 Scala中每个辅助构造器的第一个操作都是调用同类别的构造器,被调用的构造器既可以是主构造器也可以是源文件中早于调用构造器定义的其他辅助构造器,最终的结果是每个scala的构造器最终都会调用主构造器完成对象的构造,因此主构造器是类唯一的入口。 在scala中,字段、方法参数、本地变量以及函数的驼峰式命名最好以小写字符开始,如length,flatMap。类和特质的驼峰式命名应该以大写字母开始,如BigInt、List、Map等。 Java中常量名习惯全部大写,但是在scala中,比较推荐使用驼峰式风格(以大写字母开头)。