Scala编程 Functional Objects

1 如果类没有主体,则不需要花括号

class Rational(n: Int, d: Int)

n和d是类参数,Scala编译器会创建带同样参数的主构造器primary constructor


2 如果代码不在方法中,且不是字段,则Scala编译器会把这部分编译到主构造器中

//因为把println放进了主构造器,所以每次创建新的Rational实例都会调用println
class Rational(n: Int, d: Int){
  println("Created " + n)
}


3 重写方法override,修改父类方法(Scala编程书中称为重载,我觉得这样翻译不行)

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


4 precondition 先决条件,限制传递给方法或者构造器的值

使用require方法,参数布尔值,如果是false,则组织对象构造,抛出IllegalArgumentException

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

5 将类参数添加字段

Scala编译器只会提供调用方法的对象的类参数,无法提供作为参数的对象的类参数,只有把参数对象的类参数在类中添加为字段,才可以提供

class Rational(n: Int, d: Int) { // This won’t compile
  require(d != 0)
  override def toString = n +"/"+ d
  def add(that: Rational): Rational =
    new Rational(n * that.d + that.n * d, d * that.d)//无法提供that.d和that.n,
}
class Rational(n: Int, d: Int) { // This compiles
  require(d != 0)
  val numer: Int = n
  val denom: Int = d
  override def toString = numer +"/"+ denom
  def add(that: Rational): Rational =
    new Rational(
      numer * that.denom + that.numer * denom,
      denom * that.denom
    )
}


6 关键字this指向当前调用方法的对象实例


7 primary constructor之外还有辅助构造器auxiliary constructor

    > 辅助构造器定义一定是def this(...)开始

    > 调用主构造器或者早于自身定义的构造器,最终都是对主构造器的调用,主构造器是构建实例的唯一入口

def this(n: Int) = this(n, 1)

8 Scala允许使用合法的标识符如+ ,* 等来定义方法名,且可以使用操作符语法调用,即定义操作符

    四种标识符

    > 字母数字标识符

        字母或者下划线开始,之后可以是字母/数字/下划线

        $也是字母,但是尽量不要使用,会与Scala编译器的标识符冲突

    > 操作符标识符

        一个或者多个操作符字符组成,如+, ++, :::, ->

    > 混合标识符

        字母数字 + 下划线 + 操作符标识符 如unary_-

    > 字面量标识符

        用反引号``包括的任意字符串,如Thread.`yield`()

9 重载方法,修改参数类型或个数


10 隐式转换,在需要的时候Scala编译器自动把一个类型转换为另一个类型的隐式转换implicit

implicit def intToRational(x: Int) = new Rational(x)

11 Scala命名

    > 避免下划线

    > 驼峰式与Java一致

    > 常量名和Java不一样,Java全大写,Scala使用驼峰

        JAVA: X_HELLOKITTY

        SCALA: XHelloKitty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值