Created
December 5, 2012 10:29
-
-
Save agnaldo4j/4214566 to your computer and use it in GitHub Desktop.
How to work with enumerations in scala
This file contains 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
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))) | |
) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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?