《Scala 程序设计》学习笔记 Chapter 2:更简洁 更

2017-03-20  本文已影响180人  云之外

分号

变量声明

Range [P31]

  1. 1 to 10 : 1, 2, .., 10
  2. 1 until 10 : 1, 2, 3, ..., 9
  3. 1 to 10 by 3 : 1, 4, 7, 10
  4. 1 to 10 by -3 : 10, 7, 4, 1
  5. 1L to 10L by 3L
  6. 1f to 10.3f by 0.3f
  7. 'a' to 'g' by 3

偏函数

方法声明

方法具有多个参数列表

Future 简介

嵌套方法的定义与递归

推断类型信息

保留字 [P44 - 45]

字面量

整数字面量

字符字面量

字符串字面量

符号字面量

函数字面量

元组字面量

OptionSomeNone :避免使用 null

封闭类的继承

用文件和命名空间组织代码

导入类型及其成员

导入是相对的

import collection.immutable._ // 由于 scala 已经默认导入,所以不需要给出全路径
import _root_.scala.collection.parallel._ // 从 ”根“ 开始的全路径

使用第二种导入方法时,要保证库的所在路径被包含在了 CLASSPATH 中。[P57]

包对象

抽象类型与参数化类型

  1. Scala 的参数化类型与 Java 的泛型很像。举一个参数化类型的例子:[P58]

    • 在 Scaladoc 中,List 的声明为 sealed abstract class List[+A]
    • A 之前的 + 表示:如果 BA 的子类型,则 List[B] 也是 List[A] 的子类型,这被称为协类型。
    • 如果类型参数前有 - ,则表示另一种关系:如果 BA 的子类型,且 Foo[A] 被声明为 Foo[-A] ,则 Foo[B]Foo[A] 的父类型(称为逆类型)。
  2. Scala 还支持一种被称为”抽象类型“ 的抽象机制,可以用在许多参数化类型中。[P58]

  3. 参数化类型和抽象类型都被声明为其他类型的成员,就像是该类型的方法与属性一样。[P58 - 59]

    // 类型成员( type )
    abstract class BulkReader {
        type In
        val source: In
        def read: String // 不同的 In ,read 的方式不同。
    }
    class StringBulkReader extends BulkReader {
        type In = String
    }
    
    // 参数化类型
    abstract class BulkReader[In] {
        val source: In
        ...
    }
    class StringBulkReader extends BulkReader[String] = { ... }
    
  4. 类型成员比参数化类型的优势:[P59]

    • 当类型参数与参数化类型无关时,参数化类型更适用。
      • 举个例子:List[A]A 可能是 IntString 等。
    • 当类型成员与所封装的类型同步变化时,类型成员更适用。有时这种特点被称为家族多态,或者协特化。
上一篇下一篇

猜你喜欢

热点阅读