Skip to content

Instantly share code, notes, and snippets.

@agnaldo4j
Created December 5, 2012 10:29
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 agnaldo4j/4214566 to your computer and use it in GitHub Desktop.
Save agnaldo4j/4214566 to your computer and use it in GitHub Desktop.
How to work with enumerations in scala
object Planet extends Enumeration {
case class PlanetVal(name: String, mass: Double, radius: Double) extends Val(name) {
// universal gravitational constant (m3 kg-1 s-2)
val G = 6.67300E-11
val surfaceGravity = G * mass / (radius * radius)
def surfaceWeight(otherMass: Double) = otherMass * surfaceGravity
}
val MERCURY = PlanetVal("Mercury", 3.303e+23, 2.4397e6)
val VENUS = PlanetVal("Venus", 4.869e+24, 6.0518e6)
val EARTH = PlanetVal("Earth", 5.976e+24, 6.37814e6)
val MARS = PlanetVal("Mars", 6.421e+23, 3.3972e6)
val JUPITER = PlanetVal("Jupiter", 1.9e+27, 7.1492e7)
val SATURN = PlanetVal("Saturn", 5.688e+26, 6.0268e7)
val URANUS = PlanetVal("Uranus", 8.686e+25, 2.5559e7)
val NEPTUNE = PlanetVal("Neptune", 1.024e+26, 2.4746e7)
implicit def valueToPlanet(v: Value): PlanetVal = v.asInstanceOf[PlanetVal]
}
object EnumMain {
def main(args: Array[String]) {
if (args.length < 1) {
println("Usage: scala Planet <earth_weight>")
} else {
import Planet._
val earthWeight = args(0) toInt
val mass = earthWeight / EARTH.surfaceGravity
Planet.foreach( p =>
println("Your weight on %s is %f".format(p, p.surfaceWeight(mass)))
)
}
}
}
@miere
Copy link

miere commented Dec 5, 2012

Interessante, mas atípico, o modo como se trata "enum" no Scala, né?
Tive uma questão no implicit def valueToPlanet(v: Value): PlanetVal = v.asInstanceOf[PlanetVal]:
o asInstanceOf, do objeto Value, é próprio da API de Enum do Scala?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment