Skip to content

Instantly share code, notes, and snippets.

@johnelf
Last active August 29, 2015 14:02
Show Gist options
  • Save johnelf/699a14d0bbbdc614f2d4 to your computer and use it in GitHub Desktop.
Save johnelf/699a14d0bbbdc614f2d4 to your computer and use it in GitHub Desktop.
Scala类型系统
class Pen {
def getInfo = "a pen"
}
class Chalk extends Pen {
override def getInfo = "a pencil that can be erased by eraser"
}
class WhiteBoardPen extends Pen {
override def getInfo = "a white board pen that can write on window wall"
}
class Board[-T] {
def show[U <: T](pen: U) = pen match {
case p: Pen => println(s"writing with ${p.getInfo}")
case _ => println("can not write")
}
}
class Teacher[T] {
def teachLessons(board: Board[T], pen: T) = board.show(pen)
}
val teacher = new Teacher[Chalk]
teacher.teachLessons(new Board[Pen], new Chalk)
class ProgrammingLanguage {
def getInfo = "ProgrammingLanguage"
}
class ObjectOrientedLanguage extends ProgrammingLanguage {
override def getInfo = "SmallTalk"
}
class Java extends ProgrammingLanguage {
override def getInfo = "Java"
}
class Book[+T] (val content: T)
def read(a: Book[ProgrammingLanguage]) = {
println(s"""reading a book of ${a.content.getInfo}""")
}
val pl = new Book[ProgrammingLanguage](new ProgrammingLanguage)
val java = new Book[Java](new Java)
val smallTalk = new Book[ObjectOrientedLanguage](new ObjectOrientedLanguage)
read(pl)
read(java)
read(smallTalk)
class ProgrammingLanguage {
def getInfo = "ProgrammingLanguage"
}
class ObjectOrientedLanguage extends ProgrammingLanguage {
override def getInfo = "SmallTalk"
}
class Java extends ProgrammingLanguage {
override def getInfo = "Java"
}
class Book[T] (val content: T)
def read(a: Book[ProgrammingLanguage]) = {
println(s"""reading a book of ${a.content.getInfo}""")
}
val pl = new Book[ProgrammingLanguage](new ProgrammingLanguage)
val java = new Book[Java](new Java)
val smallTalk = new Book[ObjectOrientedLanguage](new ObjectOrientedLanguage)
read(pl)
read(java)
read(smallTalk)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment