Created
July 18, 2013 10:26
-
-
Save Centaur/6028302 to your computer and use it in GitHub Desktop.
for 饼干
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait CanContain[T <: CanContain[T]]{ | |
def contains(v: T):Boolean | |
} | |
trait Searchable[T <: CanContain[T]]{ | |
val data: T | |
def contains(v: T):Boolean = this.data.contains(v) | |
} | |
case class Image(bytes: Array[Int]) extends CanContain[Image]{ | |
def contains(v: Image) = { | |
this.bytes.containsSlice(v.bytes) | |
} | |
} | |
class Book[T <: CanContain[T]](val title: Searchable[T], | |
val content: Searchable[T], | |
val price: Double) { | |
def searchByTitle(v: T) = title.contains(v) | |
def searchByContent(v: T) = content.contains(v) | |
} | |
object Book extends App { | |
case class CartoonContent(data: Image) extends Searchable[Image] | |
case class CartoonTitle(data: Image) extends Searchable[Image] | |
case class Content(data: SearchString) extends Searchable[SearchString] | |
case class Title(data: SearchString) extends Searchable[SearchString] | |
implicit class SearchString(val str:String) extends CanContain[SearchString] { | |
def contains(v: SearchString) = { | |
this.str.contains(v.str) | |
} | |
} | |
implicit def string2Content(str: String) = new Content(str) | |
implicit def string2Title(str: String) = new Title(str) | |
implicit def array2Image(arr: Array[Int]) = new Image(arr) | |
val books = List( | |
new Book[SearchString](Title("A"), Content("scala"), 1.1), | |
new Book[SearchString](Title("B"), Content("java"), 2.0)) | |
books.filter(_.searchByContent("a")).foreach(println) | |
val cartoons = List( | |
new Book[Image](CartoonTitle(Array(1, 2, 3)), CartoonContent(Array(4, 5, 6)), 1.1), | |
new Book[Image](CartoonTitle(Array(1, 2, 3)), CartoonContent(Array(4, 5, 6)), 2.0)) | |
cartoons.filter(_.searchByContent(Array(1, 2))).foreach(println) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment