Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Created June 26, 2011 15:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuwei-k/1047689 to your computer and use it in GitHub Desktop.
Save xuwei-k/1047689 to your computer and use it in GitHub Desktop.
Scala Consept Pattern ?
scala> scala> implicit val yearOrdering = new Ordering[Language]{
def compare(x: Language, y: Language) = x.year compare y.year
}
yearOrdering: java.lang.Object with Ordering[Language] = $anon$1@7910769b
scala> implicit val nameLengthOrdering = new Ordering[Language]{
def compare(x: Language, y: Language) = x.name.length compare y.name.length
}
nameLengthOrdering: java.lang.Object with Ordering[Language] = $anon$1@38a3c5b6
<console>:16: error: ambiguous implicit values:
both value nameLengthOrdering in object $iw of type => java.lang.Object with Ordering[Language]
and value yearOrdering in object $iw of type => java.lang.Object with Ordering[Language]
match expected type Ordering[Language]
languages.sorted
abstract sealed case class Language(year:Int,name:String)
object Scala extends Language(2003,"Scala")
object Java extends Language(1995,"Java")
object Clojure extends Language(2007,"Clojure")
object D extends Language(1999,"D")
val languages = List(Java,Scala,Clojure,D)
scala> implicit val nameLengthOrdering = new Ordering[Language]{
def compare(x: Language, y: Language) = x.name.length compare y.name.length
}
nameLengthOrdering: java.lang.Object with Ordering[Language] = $anon$1@38a3c5b6
scala> language.sorted
res0: List[Language] = List(Language(1999,D), Language(1995,Java), Language(2003,Scala), Language(2007,Clojure))
scala> implicit val nameOrdering = new Ordering[Language]{
def compare(x: Language, y: Language) = x.name compare y.name
}
nameOrdering: java.lang.Object with Ordering[Language] = $anon$1@72d2ee5d
scala> languages.sorted
res0: List[Language] = List(Language(2007,Clojure), Language(1999,D), Language(1995,Java), Language(2003,Scala))
scala> languages.sorted(nameOrdering.reverse)
res1: List[Language] = List(Language(2003,Scala), Language(1995,Java), Language(1999,D), Language(2007,Clojure))
scala> implicit val yearOrdering = new Ordering[Language]{
def compare(x: Language, y: Language) = x.year compare y.year
}
yearOrdering: java.lang.Object with Ordering[Language] = $anon$1@7910769b
scala> language.sorted
res0: List[Language] = List(Language(1995,Java), Language(1999,D), Language(2003,Scala), Language(2007,Clojure))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment