参数化类型
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
并没有将using
像C#
那些语言,将其作为保留字。但借助于Scala
强大的扩展能力,using
形如内置于语言的控制结构,其行为类似于if, while
。
其中,using
实现请参阅借贷模式.