Skip to content

Instantly share code, notes, and snippets.

@lihaoyi
Created January 21, 2013 01:35
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 lihaoyi/4583011 to your computer and use it in GitHub Desktop.
Save lihaoyi/4583011 to your computer and use it in GitHub Desktop.
package main.scala
trait Enum[T]{ self =>
type E = this.type => T
implicit class k(e: E) extends Function0[T]{
def apply() = e(self)
}
}
object MainNew {
sealed trait DayOfWeek
object DayOfWeek extends Enum[DayOfWeek]{ self =>
case object Monday extends DayOfWeek
case object Tuesday extends DayOfWeek
case object Wednesday extends DayOfWeek
case object Thursday extends DayOfWeek
case object Friday extends DayOfWeek
case object Saturday extends DayOfWeek
case object Sunday extends DayOfWeek
}
def main(args: Array[String]){
func(_.Monday)
}
def func(d: DayOfWeek.E) = {
println(d())
}
}
object MainOld {
sealed trait DayOfWeek
object DayOfWeek{
case object Monday extends DayOfWeek
case object Tuesday extends DayOfWeek
case object Wednesday extends DayOfWeek
case object Thursday extends DayOfWeek
case object Friday extends DayOfWeek
case object Saturday extends DayOfWeek
case object Sunday extends DayOfWeek
}
def main(args: Array[String]){
func(DayOfWeek.Monday)
}
def func(d: DayOfWeek) = {
println(d)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment