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实现请参阅借贷模式.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容