Essential Scala:Parameter Type & Abstract Type

参数化类型

Reader

定义泛型的Reader[+T],并赋予协变的能力。

trait Reader[+T] {
  val source: T
  def read: String
}

StringReader

class StringReader(val source: String) extends Reader[String] {
  def read: String = source
}

FileReader

import scala.io.Source
import scala.util.Properties.lineSeparator

class FileReader(val source: File) extends Reader[File] {
  def read: String =
    Source.fromFile(source).getLines.mkString(lineSeparator)
}

抽象类型

Reader

首先定义一个抽象类型:type In;基于抽象类型In,定义了一个抽象字段:val source: In;此外,Reader定义了一个抽象方法read

trait Reader {
  type In
  val source: In
  def read: String
}

StringReader

class StringReader(val source: String) extends Reader {
  type In = String
  def read: String = source
}

FileReader

import scala.io.Source
import scala.util.Properties.lineSeparator

class FileReader(val source: File) extends Reader {
  type In = File
  def read: String =
    Source.fromFile(source).getLines.mkString(lineSeparator)
}

using:抽象控制

Scala并没有将usingC#那些语言,将其作为保留字。但借助于Scala强大的扩展能力,using形如内置于语言的控制结构,其行为类似于if, while

其中,using实现请参阅借贷模式.

你可能感兴趣的:(Essential Scala:Parameter Type & Abstract Type)